Autor Zpráva
Tonik1247
Profil *
Zdravím Vás,

Mám jistý problém, který mi teď nedá spát :D
Vypisuji si kategorie (stromově) z databáze, ale potřebuji je vypsat ala no-limit pro pole "subcategories".
Jenže mě to vždy vypne (skončí)

mám tabulku
id / parent / name / ord / urlname

a funkci

public function getCategoires( $parent = 0 ){

        $this->tree=array();

        $x=0;
        $this->query = Dquery("SELECT * FROM category WHERE parent=$parent ORDER BY name ASC");
        while ($this->cat = Darray($this->query)) {
            $x++;
            
            $this->tree[] = array(
                
                    "id"    =>    $this->cat["id"],
                    "name"    =>    $this->cat["name"],
                    "urlname"    =>    $this->cat["urlname"],
                    "subcategories"    =>    $this->getCategories ( $this->cat["id"] )
            );
            
        }
        
        return $this->tree;
        
}

a potřebuji, aby mi to vrátilo pole se všemi kategoriemi tak, jak jsou pod sebou zařazené
Díky za pomoc.
Kajman
Profil
Tonik1247:
Jenže mě to vždy vypne

Běží to tak dlouho, že usnete, nebo jak vás to vypíná? Je něco v error logu? Nemáte jen data zacyklená? To by šlo ve funkci ošetřit např. počítaným levelem zanoření a jeho maximálního limitu.

Na kategorie to není ideální kód. Pokud databáze neumí rekurzivní dotazy, tak si můžete pomoci sloupci navíc a traverzováním kolem stromu. Nebo načíst všechny kategorie jedním dotazem (pokud jich není moc) a zanoření udělat až v php nad tímto polem dat.

Nemáte možnost přímo použít rekurzivní dotazy (záleží na databazí a její verzi)?
Tonik1247
Profil *
Tím, že mě to vypíná jsem myslel to, jakoby se to pole $this->tree nahradilo (přemazalo) když tu funkci znova zavolám v "subcategories"
blaaablaaa
Profil
Tonik1247:
Na začátku metody je $this->tree = array(), takže ano, vždy pole vymažeš. Použij lokální proměnnou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0