Можете да изпълните тази заявка:
SELECT c.id AS cid, c.slug AS cslug, c.name AS cname,
s.id AS sid, s.name AS sname
FROM categories AS c
LEFT JOIN snippets AS s ON s.category = c.id
WHERE c.live=1
ORDER BY c.name, s.name
След това повторете резултатите, за да създадете правилното заглавие като:
// last category ID
$lastcid = 0;
while ($r = $navQuery->fetch_object ()) {
if ($r->cid != $lastcid) {
// new category
// let's close the last open category (if any)
if ($lastcid)
printf ('</li></ul>');
// save current category
$lastcid = $r->cid;
// display category
printf ('<li><a href="/%s">%s</a>', $r->cslug, $r->cname);
// display first snippet
printf ('<li><a href="/%s/%s">%s</a></li>', $r->cslug, $r->sname, $r->sname);
} else {
// category already processed, just display snippet
// display snippet
printf ('<li><a href="/%s/%s">%s</a></a>', $r->cslug, $r->sname, $r->sname);
}
}
// let's close the last open category (if any)
if ($lastcid)
printf ('</li></ul>');
Имайте предвид, че използвах printf
но вместо това трябва да използвате своя собствена функция, която се обвива около printf, но изпълнява htmlspecialchars
чрез параметрите (с изключение на първия, разбира се).
Отказ от отговорност:Не е задължително да насърчавам подобно използване на <ul>
с.
Този код е тук, за да покаже основната идея за обработка на йерархични данни, получени с една заявка.