sql >> Database >  >> RDS >> Mysql

Inefficiënte SQL-query

U kunt deze zoekopdracht uitvoeren:

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

Herhaal vervolgens de resultaten om de juiste kop te maken, zoals:

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

Merk op dat ik printf . heb gebruikt maar je zou in plaats daarvan je eigen functie moeten gebruiken die om printf heen loopt, maar htmlspecialchars uitvoert via de parameters (behalve de eerste natuurlijk).

Disclaimer:ik moedig dergelijk gebruik van <ul> niet noodzakelijk aan v.

Deze code is slechts hier om het basisidee te tonen van het verwerken van hiërarchische gegevens die met één zoekopdracht zijn verkregen.



  1. CakePHP converteert MySQL integers naar strings... functie rand() verknoeien

  2. Rijnummers met niet-deterministische volgorde

  3. sql-triggers Ik heb een fout bij het opslaan van de kolomnaam in variabele en gebruik deze voor OLD.myvar in sql-triggers

  4. PHP XML:Illegale Offset, maar het is in een array?