このクエリを実行できます:
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>
の使用を推奨するわけではありません s。
このコードは、1つのクエリで取得した階層データを処理する基本的な考え方を示すためのものです。