Autor Zpráva
Hricer
Profil *
Zdravím,

chci použít Nested sets model (traverzování kolem stromu) pro strukturu stránek. Př.:

id | title | content | lft | rgt | depth | url
2 | Služby | lorem ipsum | 5 |10 | 1 | sluzba
5 | Nějaká služba | lorem ipsum | 8 | 9 | 2 | nejaka-sluzba

Nevím jak identifikovat konkrétní stránku pomocí friendly url (např. /sluzby/nejaka-sluzba). Sloupeček URL totiž není unikátní. Nemůžu nic najít a přitom mi připadá, že to už někdo musel řešit.

Díky za jakýkoli návrh.
juriad
Profil
možná by mohlo fungovat:
SELECT GROUP_CONCAT(tabulka.url ORDER BY cesta.depth SEPARATOR '/') FROM tabulka
JOIN (SELECT MAX(id), depth FROM tabulka WHERE id <= $current_id GROUP BY depth) cesta ON cesta.id = tabulka.id



Ten subselect by měl zjistit id všech stránek na cestě z rootu, pro každou úroveň jednu stránku; vnější select jen slepí url příslušných stránek pomocí lomítka v pořadí od rootu.
Hricer
Profil *
juriad:
Právě to potřebuji přesně naopak. Neznám ID, ale cestu (např. /sluzby/nejaka-sluzba).
Hricer
Profil *
Našel jsem pouze jeden jediný článek a chci se o něj podělit. Dotaz by mohl vypadat nějak takto:

SELECT node.* , GROUP_CONCAT(parent.url ORDER BY parent.lft SEPARATOR  '/' ) path
FROM pages AS node, pages AS parent
WHERE node.url =  'nejaka-sluzba'
AND parent.url IN ('sluzby',  'nejaka-sluzba')
AND node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.url
HAVING path =  'sluzby/nejaka-sluzba'
ORDER BY node.lft
zdroj článku

Nejsem si jistý jestli to bude fungovat úplně dobře, ale snad ano. Někdo zkušenější to snad zkontroluje a napíše sem.

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: