Autor | Zpráva | ||
---|---|---|---|
jirka11 Profil * |
#1 · Zasláno: 14. 2. 2017, 15:33:03
Pro výpis dat pomocí traverzování kolem stromu používám tento algoritmus od Jakuba Vrány:
<?php $result = mysql_query("SELECT * FROM strom ORDER BY lft"); $hloubka = -1; while ($row = mysql_fetch_assoc($result)) { if ($hloubka < $row["hloubka"]) { echo "<ul>"; } else { echo str_repeat("</li></ul>", $hloubka - $row["hloubka"]) . "</li>"; } echo "<li>\n" . htmlspecialchars($row["nadpis"]); $hloubka = $row["hloubka"]; } echo str_repeat("</li></ul>", $hloubka + 1) . "\n"; mysql_free_result($result); ?> Vše funguje krásně, ale nějak z jeho článku nechápu, jak vypsat jen část stromu - od určitého uzlu dál. Jak tento algoritmus upravit, ideálně tak, abych určil ID položky od které se má vypsat strom? Díky. |
||
juriad_ Profil * |
#2 · Zasláno: 14. 2. 2017, 15:53:54
SELECT s.* FROM strom s JOIN strom r ON n.id = 123 WHERE s.lft >= r.lft AND s.lft <= r.rght ORDER BY s.lft Chceš uzly s takové, že uzel r je jejich předek (jsou v rozsahu jeho lft a rght): r.lft <= s.lft <= r.rght |
||
jirka11 Profil * |
Takhle mi to hodí chybu, že neexistuje sloupec n.id, pokud smáznu n. tak hodí error že id je nejednoznačné.
Hm, odpoledne už jsem si fakt seděl na vedení. Takhle to funguje: $lftrgt = mysql_fetch_assoc(mysql_query("SELECT lft, rgt FROM strom WHERE id='$id'")); $result = mysql_query("SELECT * FROM strom WHERE rgt <= $lftrgt[rgt] AND lft >= $lftrgt[lft] ORDER BY lft"); |
||
Časová prodleva: 6 let
|
0