sql >> Databasteknik >  >> RDS >> Mysql

Ineffektiv SQL-fråga

Du kan köra den här frågan:

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

Iterera sedan genom resultaten för att skapa rätt rubrik 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>');

Observera att jag använde printf men du bör använda din egen funktion istället som omsluter printf, men kör htmlspecialchars genom parametrarna (förutom den första förstås).

Friskrivningsklausul:Jag uppmuntrar inte nödvändigtvis sådan användning av <ul> s.

Den här koden är bara här för att visa den grundläggande idén om att bearbeta hierarkisk data från en fråga.



  1. Kan inte förstå hur man får data från MySql Query

  2. MySQL i Docker returnerar Servern begärde autentiseringsmetod okänd för klienten

  3. SET DATEFIRST – Ställ in den första dagen i veckan i SQL Server

  4. MySQL beviljar privilegier till användare för databas