Autor Zpráva
nevim
Profil *
Dobrý den,
pokouším se udělat seznam generovaný z databáze s "podpoložkami".
Mám v mysql tabulku seznam_1 se sloupci id, nazev, poradi a rodic.
Potřebuji docílit toho aby byly položky seřazeny podle pořadí (mám), a aby pod každou položkou která je uvedená jako rodic bylo jeho "dite".

Např.
id = 1;
nazev = "prvni";
poradi = "1";
rodic = "2";
______________________
id = 2;
nazev = "druha";
poradi = "2";
rodic = "0";

Jak na to mám jít ?
panther
Profil
nevim:
co znamená pořadí? Druhá (s pořadím = 2) nemá rodiče, měla by tedy být první, ne?

Ideálně si udělej to pole tak, aby už mělo danou strukturu:
array (2 (id) => array('nazev' => 'druha', 
                       'rodic' => 0, 
                       'potomci' => array(
                            1 => array('nazev' => ...))))
nevim
Profil *
Potřebuji aby byly položky seřazeny podle poradi (1, 2, 3, 4, atd ...), ale pokud je bude nějaká položka mít jako rodiče, tak aby byla vypsána pod nimy.

Např.

- hlavní položka 1 s id 1
-- podpoložka s id 3
- hlavní položka s id 2
Darker
Profil
Nějak takhle jsem chtěl koncipovat guestbook s reakcemi. Na konec jsem se na reakce vykašlal, takže kódem nepomohu, ale vypadalo by to takhle:
První select:
SELECT name, text, id FROM `zpravy` WHERE replyto is NULL ORDER BY date DESC
Načtení reakcí:
SELECT name, text, id FROM `zpravy` WHERE replyto >-1 ORDER BY date DESC
Zpracování reakcí:
$r = array();
while($rr = mysql_fetch_array($resp, MYSQL_ASSOC)) {
    if(!isset($r[$resp["id"]] )
      $r[$resp["replyto"]] = array();   //Seznam podpolozek pro polozku
   $r[$resp["replyto"]][] = array($resp["nane"], $resp["text"], $resp["id"]);
}
Teď mám dvě pole - seznam zpráv, a seznam reakcí, který má jako klíče ID zpráv ke kterým reakce patří.
Udělal bych pak toto:
for($i=0; $i<count($zpravy); $i++) {
  echo "<div>{$zpravy[$i]["text"]}</div>";
  if(isset($r[$zpravy[$i]["id"]])){
    /* cyklem vypsat podpolozky - $r[$zpravy[$i]["id"]][iterator]["text"]*/
  }
}

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0