Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] optymalizacja zapytań
Lejto
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


Mam kod który pobiera mi dane do galerii zawiera on jednak sporo zapytań.
Mogę go trochę zoptymalizować?
  1. $id = (int)$_GET['id'];
  2. $liczba = 2;
  3. $id = (int)$_GET['id'];
  4. $liczba = 2;
  5. $sql = $db->query('select * from galeria_foto where kategoria = "'.$kat.'" and id = "'.$foto.'"');
  6. $row = $sql->fetch_array();
  7. $numer = $row[numer];
  8.  
  9. $sql = $db->query('select * from galeria_foto where kategoria = "'.$kat.'" and id = "'.$foto.'"');
  10. $num = $sql->num_rows;
  11. $ile = ceil($num/$liczba);
  12.  
  13. if(!isset($_GET['id'])) $_GET['id'] = 0;
  14. $strona = (int)$_GET['id'];
  15.  
  16.  
  17. $q = $db->query('SELECT `id` FROM `galeria_foto` WHERE `id` > "'.$foto.'" ORDER BY `id` ASC');
  18. $wiersz = $q->fetch_array();
  19.  
  20. $quer = $db->query('SELECT `id` FROM `galeria_foto` WHERE `id` < "'.$foto.'" ORDER BY `id` DESC');
  21. $wiersz_2 = $quer->fetch_array();
  22.  
  23. $sql = $db->query('select * from galeria_foto where id = "'.$foto.'"');
  24. $num = $sql->num_rows;
  25. $ile = ceil($num/$liczba);
  26.  
  27. if(!isset($_GET['id'])) $_GET['id'] = 0;
  28. $strona = (int)$_GET['id'];
  29.  
  30.  
  31. $q = $db->query('SELECT `id` FROM `galeria_foto` WHERE `id` > "'.$foto.'" ORDER BY `id` ASC');
  32. $wiersz = $q->fetch_array();
  33.  
  34. $quer = $db->query('SELECT `id` FROM `galeria_foto` WHERE `id` < "'.$foto.'" ORDER BY `id` DESC');
  35. $wiersz_2 = $quer->fetch_array();
  36.  
  37. $zap = $db->query('select name,id from galeria_kategorie where id = "'.$kat.'"');
  38. $r = $zap->fetch_array();


Pozdrawiam
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Najpierw nasuwa się pytanie jakiej biblioteki do połączenia z bazą używasz.

i drugie:

  1. $sql = $db->query('select * from galeria_foto where kategoria = "'.$kat.'" and id = "'.$foto.'"');


czemu dwa razy?
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




No jasne że możesz. Zauważ, że nawet nie używasz czegoś takiego jak limit, choć wszędzie pobierasz tylko jeden wiersz. Nawet nie mówię, że pewne zapytania się dublują. Ja bym powiedział, że ów kod jest naprawdę bardzo nieoptymalny i zupełnie inaczej bym go napisał nie dlatego, że zapytania są źle napisane, ale już sam kod php jest w wielu miejscach bezsensowny. Całe linijki kodu produkują te same dane, choć są zbędne i wystarczy je wykonać raz. Popatrz ile razy sprawdza Ci zmienną $_GET[id] i liczy kompletnie zbędnie $strona. Co Ci daje w 10 linii liczenie ilości wierszy wyniku skoro w zapytaniu szukasz rekordu z konkretnym id, czyli będzie tam zawsze 0 albo 1. Takich nielogiczności masz więcej w raptem nie 40 linijkowym kodzie... Musisz go mocno pozmieniać by był optymalny.

EDIT: W zasadzie jakoś połowa tego kodu jest zbędna (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował thek 26.11.2009, 22:55:12
Go to the top of the page
+Quote Post
scanner
post
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




To mi przypomina kod pewnego serwisu, który ostatnio zamknęła policja.
Już same 4 pierwsze linijki świadczą o tym, że kod pisał jakiś pomyleniec
  1. $id = (int)$_GET['id'];
  2. $liczba = 2;
  3. $id = (int)$_GET['id'];
  4. $liczba = 2;

W tak prostym kodzie powtórzenia?
Powód edycji: [scanner]:
Go to the top of the page
+Quote Post
taro
post
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 5
Dołączył: 12.12.2008

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


Zamiast

SELECT * ...

(zamiast gwiazdki) proponuje też wstawić nazwy kolumn.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 22:25