Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przeszukiwanie tablic wielowymiarowych
Forum PHP.pl > Forum > Bazy danych > MySQL
elwierka
Proszę o wskazówki/ pomoc.

Mam tablicę wielowymiarową. Trzymam w niej dane dot. kategorii, grup towarowych i produktów. Częściowo przerobiłam skrypt kolegi z forum skrypt
- wyświetla wszystkie kategorie
- zlicza ilość grup towarów przypisanych do kategorii
- wyświetla nazwy grup towarowych kategorii

Obrazek Podział na kategorie i grupy towarowe.

Problem:

1) nie zlicza mi ilości produktów w danej grupie towarowej - na zdjęciu oznaczone jako nr 1
2) nie wyświetla mi produktów w danej grupie towarowej

Co robię źle? Proszę o podpowiedzi.
Poniżej zamieszczam kod:
  1. $lacz = con_to_db();
  2.  
  3. $a = 'select p.nazwa as PNAZWA,p.produkt_id as PID, gt.gt_id as GTID, gt.opis as GTOPIS, k.nazwa_kat as KATNAZWA, k.kategoria_id as KATID '.
  4. 'from produkty as p, grupa_towarow as gt, '.
  5. 'kategorie as k, szczeg_kat as szczeg WHERE '.
  6. 'szczeg.kategoria_id = k.kategoria_id AND '.
  7. 'szczeg.produkt_id = p.produkt_id AND p.gt_id = gt.gt_id '.
  8. 'order by k.nazwa_kat, gt.opis, p.nazwa';
  9. $wynik = $lacz->query($a);
  10.  
  11.  
  12. try{
  13. if (!$wynik) {
  14. throw new Exception('Wykonanie zapytania nie powiodło się.');
  15. }
  16.  
  17. if (!$wynik->num_rows>0) {
  18.  
  19. throw new Exception('<h2>W bazie danych nie ma jeszcze produktów.</h2>');
  20. }
  21.  
  22. $kategorie = array();
  23. $grupy = array();
  24.  
  25. while ($row = $wynik->fetch_array()){
  26. $kat_id = $row['KATID'];
  27. $gt_id = $row['GTID'];
  28.  
  29. if (!isset($kategorie[$kat_id]))
  30. $kategorie[$kat_id] = array('nazwakat' => $row['KATNAZWA'], 'grupa_tow'=>$grupy, 'produkty'=>array());
  31.  
  32. if(!isset($kategorie['grupa_tow']))
  33. if(!empty($row['GTOPIS']))
  34. $kategorie[$kat_id]['grupa_tow'][] = array('opis'=>$row['GTOPIS']);
  35. //dodajemy do kategorii kolejne produkty
  36. if (!empty($row['PNAZWA'])) //jeśli istnieje produkt
  37. $kategorie[$kat_id]['GTID']['produkty'][] = array('nazwa' => $row['PNAZWA'], 'produkt_id'=>$row['PID']);
  38. }
  39.  
  40.  
  41. foreach ($kategorie as $idkat => $kateg){ //petla, która leci po kategoriach (warstwa)
  42. echo '<div style="float:left; width:200px; margin:5px; border:2px solid #fff;"><h3 class="tlo-granat txtBialy wb">'.$kateg['nazwakat'].' ('.count($kateg['grupa_tow']).')</h3>';
  43. foreach ($kateg['grupa_tow'] as $gtow){
  44. //pętla, która leci po grupach towarów w kategorii
  45. echo '<div style="float:left; width:180px; margin:5px; "><h3 class="tlo-orange txtBialy wb">'.$gtow['opis'].' ('.count($gtow['produkty']).')</h3>';
  46.  
  47. foreach ($kateg['produkty'] as $produkt){ //pętla, która leci po produktach w kategorii
  48. echo '<div style="float:left; background:#f6fcfd; height:14px; padding:5px;"><b><a href="./?d=szczegolyProduktu&id='.$produkt['produkt_id'].'" class="url">'.$produkt['nazwa'].'</a> | </b></div>';
  49. }
  50.  
  51.  
  52. echo '</div>';
  53. }
  54. echo '</div>';
  55. }
  56.  
  57.  
  58.  
  59. } catch (Exception $e) {
  60.  
  61. echo $e->getMessage();
  62. tworz_stopke();
  63. }
  64. }
BaN
Tytuł trochę nieadekwatny do treści, bo z tego co widzę nie chcesz przeszukać tablic wielowymiarowych, tylko wyświetlić pogrupowane produkty
Dwie uwagi:
1. skoro główną tabelą, z której wyciągasz dane są produkty a łączysz wszystkie tabele za pomocą przecinka, czyli JOIN, to sprawdzanie czy elementy (opis grupy i nazwa produktu) są niepuste trochę bez sensu, no chyba że do bazy zapisujesz produkty lub grupy towarowe z wartością pustą?
2. źle grupujesz produkty, jak rozumiem chcesz mieć kategorie, w ramach kategorii grupy towarowe, w ramach grup - produkty

Od wiersza 24, pisane z palca, więc ewentualnie popraw błędy jeśli jakieś zrobiłem:
  1. $kategorie = array();
  2. while ($row = $wynik->fetch_array()) {
  3. $kat_id = $row['KATID'];
  4. $gt_id = intval($row['GTID']);
  5. if (!isset($kategorie[$k_id])) {
  6. $kategorie[$kat_id] = array(
  7. 'nazwa_kategorii' => $row['KATNAZWA'],
  8. 'liczba_produktow' => 0,
  9. 'grupy_towarowe' => array()
  10. );
  11. }
  12. if (!isset($kategorie[$kat_id]['grupy_towarowe'][$gt_id])) {
  13. $kategorie[$kat_id]['grupy_towarowe'][$gt_id] = array(
  14. 'opis' => $row['GTOPIS'],
  15. 'produkty' => array()
  16. );
  17. }
  18. $kategorie[$kat_id]['grupy_towarowe'][$gt_id][$row['PID']] = $row['PNAZWA'];
  19. ++$kategorie[$kat_id]['liczba_produktow'];
  20. }
  21. foreach ($kategorie as $kategoria) {
  22. echo '<div style="float:left; width:200px; margin:5px; border:2px solid #fff;"><h3 class="tlo-granat txtBialy wb">'.$kategoria['nazwa_kategorii'].' ('.$kategoria['liczba_produktow'].')</h3>';
  23. foreach ($kategoria['grupy_towarowe'] as $grupa_towarowa){
  24. echo '<div style="float:left; width:180px; margin:5px; "><h3 class="tlo-orange txtBialy wb">'.$grupa_towarowa['opis'].' ('.count($grupa_towarowa['produkty']).')</h3>';
  25. foreach ($grupa_towarowa['produkty'] as $produkt_id => $produkt){
  26. echo '<div style="float:left; background:#f6fcfd; height:14px; padding:5px;"><b><a href="./?d=szczegolyProduktu&id='.$produkt_id.'" class="url">'.$produkt.'</a> | </b></div>';
  27. }
  28. echo '</div>';
  29. }
  30. echo '</div>';
  31. }
elwierka
Dzięki smile.gif no teraz działa tak, jak chciałam smile.gif tylko w linii 5 zamiast ['k_id'] powinno być ['kat_id'].
Dzięki 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.