Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Foreach
Forum PHP.pl > Forum > Przedszkole
moczymorda
Ja wiem że to będzie bardzo łatwa odpowiedź ale mam problem ze zrozumieniem foreach. W bazie mam kategorie produktów o strukturze

  1. [ id ][ id_parent ][ nazwa ]

Listuje sobie to tak:

  1. <?php foreach($this->katalog as $katalog){ ?>
  2.  
  3. <td class="center"><?php echo $this->escape($katalog->id);?></td>
  4. <td class="center"><?php echo $this->escape($katalog->id_parent);?></td>
  5.  
  6. <?php } ?>


Chciałbym wykorzystując to jedno zapytanie zabronić usuwania kategorii jeśli posiada subkategorię. Wiem że trzeba będzie napisać drugie foreach żeby sprawdzało czy dla danego $katalog->id istnieje subkategoria z $katalog->id_parent.
everth
Są dwa wyjścia. Pierwsze - dodajesz na stałe w bazie pole które trzyma liczbę potomków danego węzła (np. desc_count). Musisz je aktualizować przy każdym usunięciu/dodaniu węzła potomnego. W drugim rozwiązaniu generujesz sobie to pole w czasie zapytania SQL np.
  1. SELECT id cur_id, (SELECT COUNT(*) FROM tabela WHERE id_parent=cur_id) desc_count FROM tabela

W obu dostajesz w każdym wierszu liczbę potomków (pierwszego poziomu). Jeśli liczba jest większa niż 0 to blokujesz usunięcie.
moczymorda
Drugi sposób nie zamuli jak będzie 1000 kategorii i 100000 podkategorii?
everth
Musiałbyś sprawdzić. Na moim malutkim zbiorze (50 rek) różnice pomiędzy zwykłym selektem a zagnieżdżonym są pomijalne. Przy większych lepiej trzymaj to pole statycznie.
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.