Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL Wählen Sie einen zufälligen Datensatz aus jeder Kategorie aus

Diese Abfrage gibt alle Elemente, die Kategorien zugeordnet sind, in zufälliger Reihenfolge zurück:

SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()

Um jede Kategorie auf eine zu beschränken, schließen Sie die Abfrage in einen Teil ein GROUP BY :

SELECT * FROM (
    SELECT
    c.id AS cid, c.category, i.id AS iid, i.name
    FROM categories c
    INNER JOIN items i ON c.id = i.category
    ORDER BY RAND()
) AS shuffled_items
GROUP BY cid

Beachten Sie, dass, wenn eine Abfrage sowohl GROUP BY enthält und ORDER BY -Klausel wird die Gruppierung vor dem Sortieren durchgeführt. Aus diesem Grund habe ich zwei Abfragen verwendet:Die erste sortiert die Ergebnisse, die zweite gruppiert die Ergebnisse.

Ich verstehe, dass diese Abfrage kein Rennen gewinnen wird. Ich bin offen für Vorschläge.