Dzień dobry, ciężko mi było nazwać ten wątek, a jeszcze ciężej wyjaśniać, o co mi chodzi.
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:
  1. <?php
  2.  
  3. function lacz_bd()
  4. {
  5. static $wynik;
  6.  
  7. if(is_resource($wynik)) return $wynik;
  8.  
  9. $wynik = new mysqli('ip', 'user', 'pass', 'baza');
  10. if (!$wynik)
  11. return false;
  12. else
  13. {
  14. $wynik->autocommit(TRUE);
  15. return $wynik;
  16. }
  17. }
  18.  
  19. function wynik_bd_do_tablicy($wynik)
  20. {
  21. $tablica_wyn = array();
  22.  
  23. for ($licznik=0; $rzad = $wynik->fetch_assoc(); $licznik++)
  24. $tablica_wyn[$licznik] = $rzad;
  25.  
  26. return $tablica_wyn;
  27. }
  28.  
  29. function spr_dost()
  30. {
  31.  
  32. $lacz = lacz_bd();
  33. $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
  34. $wynik = @$lacz->query($zapytanie);
  35. if (!$wynik)
  36. return false;
  37. $wynik = wynik_bd_do_tablicy($wynik);
  38. $lacz->close();
  39. return $wynik;
  40. }
  41.  
  42. $tablica = spr_dost();
  43.  
  44. function test($a, $b, $c) {
  45. if ($a['stock'] == $c) echo '['.$a['nazwa_rozmiaru'].']'; // wyświetlenie pod głównym produktem, czyli $c wszystkich dostępnych rozmiarów w nawiasach []
  46. }
  47.  
  48. $c=2; //zmienna pochodzić będzie z elementu 1szej tablicy
  49.  
  50. array_walk($tablica, 'test', $c); //
  51.  
  52. ?>



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ę...