Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nieefektywne zapytanie SQL

Możesz uruchomić to zapytanie:

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

Następnie przejdź do wyników, aby utworzyć odpowiedni nagłówek, taki jak:

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

Zauważ, że użyłem printf ale zamiast tego powinieneś użyć własnej funkcji, która otacza printf, ale uruchamia htmlspecialchars przez parametry (oczywiście z wyjątkiem pierwszego).

Zastrzeżenie:niekoniecznie zachęcam do takiego korzystania z <ul> s.

Ten kod jest tutaj, aby pokazać podstawową ideę przetwarzania danych hierarchicznych uzyskanych za pomocą jednego zapytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Znajdowanie nakładania się czasu

  2. Jaki jest powód, dla którego następujący kod sql nie może wstawić danych?

  3. MySQL:Nie można utworzyć/zapisać do pliku '/tmp/#sql_3c6_0.MYI' (Errcode:2) - Co to w ogóle oznacza?

  4. Kłopotliwe zachowanie arytmetyczne php/Mysql w czasie

  5. Jak napisać wiele kolumn w klauzuli za pomocą sqlalchemy