Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie wszystkich kategorii
Forum PHP.pl > Forum > PHP
z3L
Witam.

Mam pewien problem, otóż mając id jednej kategorii, chciałbym do arraya dodać id wszystkich podkategorii , nawet podkategorii podkategorii. Nie wiem zbytnio jak sie za to logicznie zabrać.

Struktura mojej tabeli:

Pole main_id odpowiada za id kategorii nadrzędnej.

Zatem mając id 1 , chciałbym mieć w tablicy id: 2, 4, 3, 5.
Mając id 2, chciałbym mieć w tablicy id: 3, 5

Z góry dziękuję.
Spawnm
w zapytaniu dajesz WHERE main_id = '2'
wyszuka ci wszyskie pola z main_id równym 2
z3L
Cytat(Spawnm @ 7.03.2009, 16:34:56 ) *
w zapytaniu dajesz WHERE main_id = '2'
wyszuka ci wszyskie pola z main_id równym 2


Mówisz mi rzeczy oczywiste. Chodzi o to, że chcę za pomocą pętli wyszukać dynamicznie wszystkie podkategorie, nie ważne jak daleko zagłębione.
bełdzio
wrzuc w google drzewa + php
z3L
Cytat(bełdzio @ 7.03.2009, 16:38:29 ) *
wrzuc w google drzewa + php


A istnieje inny sposób nie zmieniając struktury tabeli ?
kefirek
Ja bym to zrobil tak gdzie $cat_id to ide kategori
  1. <?php
  2. $cat_id = 15;
  3. $wynik = array();
  4. $tablica = array();
  5.  
  6. $wynik = mysql_query("SELECT * FROM tabela");
  7.  
  8. while($dane = mysql_fetch_array($wynik)) {
  9. $tablica[] = array("id"=>$dane["id"], "main_id"=>$dane["main_id"],"name"=>$dane["name"]);
  10. }
  11.  
  12. foreach($tablica as $nazwa) if ($nazwa["main_id"] == $cat_id) $wynik[] = $nazwa;
  13.  
  14. foreach($wynik as $element) {
  15. echo $element["name"].'<br>';
  16. }
  17. ?>
Orkan
@kefirek: obawiam sie ze twoj pomysl nie zadziala dla "podkategorii podkategorii"

@z3L: potrzebujesz funkcji rekurencyjnej, np:
  1. <?php
  2. function find_pgsel_recursive($ids, $limit)
  3. {
  4.    if($limit>0 && is_array($ids)) {
  5.        $out = array();
  6.        $sql = sql_query("SELECT id FROM table WHERE main_id IN (".implode(',',array_keys($ids)).")");
  7.        while($row = sql_fetcharray($sql)) {
  8.            $out[$row['id']] = '';
  9.        }
  10.        $limit--;
  11.        if($limit && count($out)) $out += find_pgsel_recursive($out, $limit);
  12.        return $out;
  13.    }
  14.  
  15.    return array();
  16. }
  17. ?>
kefirek
Czemu nie zadziała ? dla id danej kategori pobiera wszystkie podkategorie. Sprawdzales w ogole kod co podałem ?
Orkan
@kefirek: zauwaz ze "trzecia kategoria" ma main_id=2. Sprobuj ja znalezc podajac za $cat_id=1 (Główna kategoria)
kefirek
Rozumiesz chociaz troche działanie tego kodu co podałem ? Bo mi sie wydaje że nie
A ten fragment rozumiesz ?
  1. <?php
  2. foreach($tablica as $nazwa) if ($nazwa["main_id"] == $cat_id) $wynik[] = $nazwa;
  3. ?>


Kod sprawdza czy main_id jest równe $cat_id jak tak to dodaje do tablicy
Orkan
no to wlasnie o tym mowie, ale widze ze ciezko bedzie to wylozyc w "przystepny" sposob...

pytanie: a co sie stanie jesli main_id NIE jest równe $cat_id ale wciąż nalezy do podanego $cat_id jako !podkategoria podkategorii! - np. wiersz o id=3 a Ty szukasz $cat_id=NULL, czyli wszystkie podkategorie w "Główna kategoria"

EDIT: a tak wogole to po co Ci ten foreach jak juz masz jedna petle z wynikami bazy?
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.