sql >> Databáze >  >> RDS >> Mysql

Neefektivní SQL dotaz

Můžete spustit tento dotaz:

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

Poté iterujte výsledky, abyste vytvořili správný nadpis jako:

// 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>');

Všimněte si, že jsem použil printf ale měli byste místo toho použít svou vlastní funkci, která obtéká printf, ale spouští htmlspecialchars přes parametry (samozřejmě kromě prvního).

Prohlášení:Nezbytně nepodporuji takové použití <ul> s.

Tento kód je zde jen proto, aby ukázal základní myšlenku zpracování hierarchických dat získaných jedním dotazem.



  1. Soulad s GDPR a váš SQL Server

  2. připojení k databázi Oracle ve web.config asp.net

  3. Spojovací tabulka s podmínkou podřetězce

  4. Perl DBI fetchall_hashref