Informacje na ten temat można znaleźć na stronie http://drupal.org/node/1067802 .
Biorąc to wszystko pod uwagę, jakie sytuacje istnieją, w których mógłbym chcieć użyć db_select (), czy powinienem polegać wyłącznie na db_query?
Informacje na ten temat można znaleźć na stronie http://drupal.org/node/1067802 .
Biorąc to wszystko pod uwagę, jakie sytuacje istnieją, w których mógłbym chcieć użyć db_select (), czy powinienem polegać wyłącznie na db_query?
Odpowiedzi:
Istnieje 5 powodów, aby używać SelectQuery
Budujesz dynamiczne zapytania z różną liczbą warunków, połączeń, pól i tak dalej. Zobacz field_read_fields () jako przykład.
Chcesz używać tak zwanych ekstenderów . Przykładowymi przedłużaczami są PagerDefault (zastępuje pager_query () ) i TableSort (zastępuje tablesort_sql () ). Pozwalają one dodatkowo dodać funkcjonalność do SelectQuery. Zobacz także Jak tworzyć sortowalne tabele za pomocą pagera z danymi z niestandardowej tabeli? . Przykład: node_page_default () .
Chcesz zezwolić innym modułom na zmianę twoich zapytań. Następnie możesz dodać tak zwane tagi, a SelectQuery automatycznie wywoła odpowiedni haczyk alter dla tego tagu. W dużym stopniu polegam na tym w moim module Privatemsg (Zrobiliśmy to już w D6 z niestandardowym narzędziem do tworzenia zapytań).
Jeśli chcesz / musisz użyć systemu node_access, aby wyświetlić tylko węzły, użytkownik może to zobaczyć. Wystarczy dodać tag „node_access” do zapytania $. Zastępuje to db_rewrite_sql ().
SelectQuery ma kilka funkcji, dzięki którym kod działa tak samo we wszystkich obsługiwanych bazach danych. Na przykład istnieje SelectQuery :: orderRandom () . A jeśli masz warunek LIKE, -> warunek („pole”, wartość $, „LIKE”) upewni się, że porównanie zawsze nie uwzględnia wielkości liter. W D6 trzeba było użyć LOWER () do tego, co było znacznie wolniejsze. Ale AFAIK, nie ma teraz więcej niż tych dwóch.
Jeśli żaden z tych powodów nie ma zastosowania w konkretnym przypadku, użyj db_query ().
Dokumentację odb_query()
mówi:
Użyj tej funkcji do zapytań SELECT, jeśli jest to zwykły ciąg zapytania. Jeśli program wywołujący lub inne moduły muszą zmienić zapytanie, użyj zamiast tego db_select ().
Zawsze używam db_select, ponieważ wolę czytelność, łatwość konserwacji i kompatybilność między bazami danych niż małe przyrosty wydajności. Co więcej, uważam, że liczby podane we wspomnianym numerze dają zły obraz ogólnej wydajności. Mówimy o 300 mikrosekundach różnicy w zapytaniu, które podczas zwracania więcej niż jednej kolumny często działa w zakresie wielu milisekund. I nie zdziwiłbym się, gdyby istniało jakieś jednorazowe obciążenie ogólne (ładowanie klasy), a zatem różnice dla żądania pełnego (strony) są znacznie mniejsze.