Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Templatowanie zapytań SQL w php
sniver
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 5
Dołączył: 31.08.2007

Ostrzeżenie: (0%)
-----


Zazwyczaj gdy spotykam kody różnego pokroju w PHP to czesto warstwa logiczna od wyglądu jest oddzielona.
Pal licho jeśli obsługa np. mysql'a jest w jakiś przystępny sposób zrobiona i do tego ktoś wykorzystał np. pdo i "przygotowywanie zapytań".

Ale często spotykam się też z kodami gdzie zapytanie jest przygotowywane strukturalnie i dość często przy nieco bardziej złożonych mam problemy z ich rozszyfrowaniem (IMG:style_emoticons/default/blinksmiley.gif)

Powstaje więc pytanie czy: warto oddzielić tę warstwę (jeśli taka istnieje) bazy danych - czyli to gdzie te duperele są obsługiwane i wypisać zapytania tak by znajdowały się w oddzielnym pliku i stworzyć coś na wzór smarty?

Dla przykładu zapytanie
  1. SELECT
  2. `nazwa`,
  3. `opis`,
  4. `zdjecie`
  5. FROM
  6. `jakasTabela`
  7. {IF $id}
  8. WHERE
  9. `id` = {$id}
  10. {else}
  11. ORDER BY `id` DESC
  12. LIMIT 0, 30
  13. {/IF}


i np. taki kod w php który to przetworzy i wyciągnie zapytanie np. z xml:

  1.  
  2. $zapytanieOdczytaneZPlikuXML = ...;
  3.  
  4. $dbPattern = new ParserSQL;
  5. $dbPattern->assign('id', 123);
  6.  
  7. $dbPattern->parse( $zapytanieOdczytaneZPlikuXML );
  8.  
  9. // Wypisujemy te zapytanie na ekran
  10. var_dump( $dbPattern->model );
  11.  
  12. //..dalsza część skryptu...
  13.  


Pytanie czy warto czy nie warto?
Co ważne czy tak przygotowane zapytania były by wygodne w "obróbce", zmianach?
Czy przeciętny PHPMaster wiedział by o co w tym chodzi?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Przy zapytaniach typu select * from costam where .... order by costam limit 1,10 nie warto przy zlozonych zapytaniach ktore moze miec nawet kilkanascie relacji warto wiem bo ostatnio kolega mi wlasnie pokazal takie rozwiazanie w jego fw spoczatku nie wiedzialem o co biega ale jest to wydajniejsze.










Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(marcio @ 19.11.2009, 14:23:55 ) *
Przy zapytaniach typu select * from costam where .... order by costam limit 1,10 nie warto przy zlozonych zapytaniach ktore moze miec nawet kilkanascie relacji warto wiem bo ostatnio kolega mi wlasnie pokazal takie rozwiazanie w jego fw spoczatku nie wiedzialem o co biega ale jest to wydajniejsze.

O czym Ty mówisz? Twierdzisz, że budując zapytanie w taki sposób (jakimś builderem) wykona się ono szybciej? Przecież i tak finalnie zrobiony z tego zostanie string, który będzie przekazany jako argument do funkcji *_query(). Takie rozwiązanie na pewno nie będzie wydajniejsze; będzie wręcz mniej wydajne.

Ja napisałem sobie klasę, która dynamicznie tworzy mi zapytania (natchnęła mnie do tego klasa z Kohany), ale nie ze względu na wydajność, a dla wygody użytkowania:
  1. $query = new Database_Query_Builder();
  2.  
  3. $query
  4. ->select('*')
  5. ->from('tabela')
  6. ->join('inna', array('inna.tabela_id' => 'tabela.id'))
  7. ->order_by('jakies_pole', 'ASC')
  8. ;
  9.  
  10. if (jakis_warunek) {
  11. $query->where('inne_pole', 10);
  12. }
  13.  
  14. if (inny_warunek) {
  15. $query->where('kolejne_pole', array(1, 2, 3), 'IN');
  16. }

Dzięki dynamicznemu dodawaniu warunków/sortowań/złączeń itd. zdecydowanie wygodniej jest mi w ten sposób tworzyć zapytania.

PS: odszedłem nieco od tematu więc do niego powrócę. Wspomniane przez autora "templatowanie" zapytań to nic innego jako model (w MVC). W modelu zawierasz wszystkie zapytania i masz je w jednym miejscu, a nie porozrzucane po całym systemie.

Ten post edytował phpion 19.11.2009, 12:44:50
Go to the top of the page
+Quote Post
sniver
post
Post #4





Grupa: Zarejestrowani
Postów: 159
Pomógł: 5
Dołączył: 31.08.2007

Ostrzeżenie: (0%)
-----


Cytat(phpion @ 19.11.2009, 12:42:29 ) *
PS: odszedłem nieco od tematu więc do niego powrócę. Wspomniane przez autora "templatowanie" zapytań to nic innego jako model (w MVC). W modelu zawierasz wszystkie zapytania i masz je w jednym miejscu, a nie porozrzucane po całym systemie.


Dokładnie tak - znam model MVC i wiem na czym polega. Z tym że jestem za extreme programing - a od tego ostatnio się już odeszło i z tego co widzę to wraca się ponownie bo nikt nie ma czasu na tworzenie pięknego kodu (IMG:style_emoticons/default/smile.gif)

...stąd te pytanie, skoro nikt nie ma czasu na ładny kod to trzeba przygotować "zaplecze" tak by całość była odpowiednio poskładana.

oj błogosławieni ci którzy w pracy robią to co chcą (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 13:03