Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania
Forum PHP.pl > Forum > PHP
kiler129
Witajcie!
Jestem w trakcie przepisywania swoego CMSu aby używał PDO i był bezpieczniejszy. Natrafiłem po drodze na blok kodu opisany komentarzem "do optymalizacji" ale jak nie wiedziałem podczas pisania jak zoptymalizowac zapytanie tak nie wiem teraz winksmiley.jpg

  1. <?php
  2. $is_modified = $this->mysql_core->array_reply("SELECT `mod_counter` FROM `news` WHERE `id` = '$id' LIMIT 1", MYSQL_ASSOC, true);
  3. if($is_modified["mod_counter"] <= 0)
  4. {
  5. $data = $this->mysql_core->array_reply("SELECT '-1' AS `frname`, `news`.`date_add`, `news`.`tags`, '-1' AS `date_mod`, `news`.`mod_counter`, `news`.`expiring`, `news`.`comments`
  6. FROM `news`
  7. WHERE `id` = '$id'
  8. LIMIT 1", MYSQL_ASSOC, true);
  9. }
  10. else
  11. {
  12. $data = $this->mysql_core->array_reply("SELECT `users`.`frname`, `news`.`tags`, `news`.`date_add`, `news`.`date_mod`, `news`.`mod_counter`, `news`.`expiring`, `news`.`comments`
  13. FROM `news` , `users`
  14. WHERE `news`.`user_mod` = `users`.`id`
  15. AND `news`.`id` = '$id'
  16. LIMIT 1", MYSQL_ASSOC, true);
  17. }?>


Czy ktoś ma pomysł jak to upakować w jedno zapytanie zamiast 3? ;]
W gwoli objaśnienia - array_reply() zwraca wielowymiarową tablicę z kolejnymi wierszami uzyskanymi z zapytania.
Daimos
Możesz wykorzystać procedury i tam się pobawić, albo pokombinować z podzapytaniami i instrukcjami warunkowymi (goto: manual)
kiler129
Pierwszy sposób odpada - nie wszystkie bazy obsługuje się tak samo pod tym względem a ja mam wymóg MySQL+PgSQL+SQLite+FireBird


Cytat(Daimos @ 5.11.2010, 17:55:15 ) *
(...)podzapytaniami i instrukcjami warunkowymi (goto: manual)

Tam w pierwszej kolejności się udałem jednakże po próbach odrzekłem "pier..." i zostawiłem winksmiley.jpg
Problem teraz wrócił i postanowiłem zapytać.
zend
1) nie 3, a 2 zapytania
2) gdyby nie
Cytat
MySQL+PgSQL+SQLite+FireBird
to mysql if i miksujesz 2 i 3 zapytanie
3) czemu chcesz to optymalizować skoro działa dobrze (zakładając oczywiście że kod nie jest wykonywany w pętli)?
kiler129
Dlaczego? Nie lubie dirty code i omijania problemów smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.