sql >> Database teknologi >  >> RDS >> Mysql

Ineffektiv SQL-forespørgsel

Du kan køre denne forespørgsel:

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

Gentag derefter resultaterne for at skabe den rigtige overskrift som:

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

Bemærk, at jeg brugte printf men du bør bruge din egen funktion i stedet, som omslutter printf, men kører htmlspecialchars gennem parametrene (undtagen den første selvfølgelig).

Ansvarsfraskrivelse:Jeg opfordrer ikke nødvendigvis til sådan brug af

    s.

    Denne kode er kun her for at vise den grundlæggende idé om at behandle hierarkiske data, der er opnået med én forespørgsel.



  1. php password_verify() hash og pass vil ikke matche

  2. SQL Client til Mac OS X, der fungerer med MS SQL Server

  3. Er det muligt at sende tabelnavn som en parameter i Oracle?

  4. Nodejs udtrykker og lover ikke at gøre, hvad jeg forventer