Po chłopsku: wyświetlając podkatalog produktów, to dla każdego produktu z osobna muszę sprawdzić jego dostępność oraz nazwę rozmiarów dostępnych podproduktów. Najprościej jest zadać kilkadziesiąt zapytań do bazy, jednak każdy chce, aby jego strona działała szybciutko i nie obciążała zbytnio serwera. Wpadłem na pomysł, że wyślę tylko 2 zapytania do bazy (1 - zapytanie o listę produktów do wyświetlenia, w tym jego cena, krótki opis; 2 - zapytanie o dostępność podproduktów, w tym id głównego produktu oraz nazwy rozmiarów). Po otrzymaniu odpowiedzi od bazy, oprę się na 2 tabelach.
Wyświetlenie 1szej tabeli nie stanowi problemu, ale podłączenie 2giej tabeli już stwarza kłopoty. Sam wpadłem na coś takiego:
<?php function lacz_bd() { $wynik = new mysqli('ip', 'user', 'pass', 'baza'); if (!$wynik) return false; else { $wynik->autocommit(TRUE); return $wynik; } } function wynik_bd_do_tablicy($wynik) { for ($licznik=0; $rzad = $wynik->fetch_assoc(); $licznik++) $tablica_wyn[$licznik] = $rzad; return $tablica_wyn; } function spr_dost() { $lacz = lacz_bd(); $zapytanie = "select * from baza.stock where baza.stock > '0'"; //zapytanie oczywiście zostanie zmienione tak, aby dołączyć do $wynik id produktu głównego oraz nazwę rozmiaru podproduktu $wynik = @$lacz->query($zapytanie); if (!$wynik) return false; $wynik = wynik_bd_do_tablicy($wynik); $lacz->close(); return $wynik; } $tablica = spr_dost(); function test($a, $b, $c) { if ($a['stock'] == $c) echo '['.$a['nazwa_rozmiaru'].']'; // wyświetlenie pod głównym produktem, czyli $c wszystkich dostępnych rozmiarów w nawiasach [] } $c=2; //zmienna pochodzić będzie z elementu 1szej tablicy ?>
I teraz wielka prośba do was - czy macie pomysł na coś "szybszego", pochłaniającego mniej pamięci? Na początku dla każdego podproduktu wysyłałem zapytanie do bazy, a jak w podkatalogu było np. 100 produktów, a każdy produkt ma przynajmniej 2 podprodukty - to wiadomo, miałem około 200 zapytań do bazy... Nie wspomnę, że dla każdego produktu wysyłałem osobne zapytanie o cenę...