Dariusz
L.
programista/
specjalista ds. IT
Temat: mysql+php proste optymalne zapytanie
nie mam możliwości sprawdzenia ani określenia wydajności dwóch sposobów zapytań i przekazywania do PHP, stąd pytanie do Was:co będzie wydajniejsze?
Mamy takie tabele:
koszulka
-----------
idKoszulka
opis
napisy
-----------
idNapis
opis
koszulka2napis
-----------
idKoszulka
idNapis
w tabeli koszulka jest jeden rekord "koszulka A", a w napisy mamy "napis a", "napis b", "napis c" i wszystkie te napisy sa przypisane do owej koszulki (wykorzystana jest do tego tabela koszulka2napis)
Założenie: koszulek jest 100000, a do każdej są przypisane po 3 napisy
Rozwiązanie 1
----------------------------------
mysql_query("SELECT koszulka.opis AS koszulka, napisy.opis AS napis, koszulka.id
FROM koszulka
INNER JOIN koszulka2napis
ON koszulka2napis.idKoszulka=koszulka.idKoszulka
INNER JOIN napisy
ON napisy.idNapis=koszulka2napis.idNapis")
------
while($r=mysql_fetch_array($q)){
$koszulka[$r['id']]=$r['koszulka'];
$napis[$r['id']][]=$r['napis']
}
Rozwiązanie 2 (skrót myślowy)
----------------------------------
pobierz wszystkie ID koszulek
$tablicaKoszulek[idKoszulka]=koszulka
foreach ($tablicaKoszulek AS $id=>$koszulka){
pobierz napisy dla każdej kolejnej koszulki
$napis[$id]][]=$napis
}
Cel: pobranie i wypisanie danych w stylu:
koszulka1:napis1,napis2,napis3
koszulka2:napis1,napis2,napis3
....
w pierwszym rozwiązaniu do zmiennej $koszulka[id] jest przypisywana koszulka tyle razy ile ma napisów (czyli w tym przypadku trzykrotnie) i to jest minus, plusem jest to, że jest jedno zapytanie do bazy
w drugim przypadku zapytań jest tyle ile koszulek+1, ale każda ze zmiennych przypisywana jest tylko raz.
Co jest bardziej optymalne?