Heim > Datenbank > MySQL-Tutorial > Wie kann ich in MySQL effizient ein zufälliges Element aus jeder Kategorie abfragen?

Wie kann ich in MySQL effizient ein zufälliges Element aus jeder Kategorie abfragen?

DDD
Freigeben: 2024-12-28 00:23:09
Original
678 Leute haben es durchsucht

How to Efficiently Query One Random Item from Each Category in MySQL?

Zufällige Elemente aus jeder MYSQL-Kategorie abfragen

Datenbanksysteme stoßen auf Szenarien, in denen die Auswahl eines zufälligen Datensatzes aus jeder Kategorie üblich ist. Stellen Sie sich eine Datenbank mit einer Items-Tabelle vor, die Artikel enthält, die zu verschiedenen Kategorien gehören, jede mit ihrer eindeutigen ID. Und eine separate Kategorientabelle stellt die Namen und IDs der Kategorien bereit.

Um ein einzelnes zufälliges Element pro Kategorie auszuwählen, können wir eine Kombination aus Gruppierung und Randomisierung nutzen.

Zuerst verbinden wir die Elemente und Kategorientabellen auf der Kategorie-ID, um Elemente mit ihren jeweiligen Kategorien in Beziehung zu setzen:

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
Nach dem Login kopieren

Dies ergibt einen Ergebnissatz, der alle Elemente mit der zugehörigen Kategorie enthält Informationen.

Um nun die Artikelauswahl zu randomisieren, fügen wir ORDER BY RAND() hinzu:

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()
Nach dem Login kopieren

Um jede Kategorie auf einen Artikel zu beschränken, verwenden wir ein partielles 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
Nach dem Login kopieren

Diese Abfrage gruppiert effektiv die zufällig sortierten Elemente nach Kategorie-ID und wählt das erste Element in jeder Gruppe aus. Der Gruppierungsvorgang erfolgt vor dem Sortieren, sodass die zufällige Reihenfolge innerhalb jeder Kategorie erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL effizient ein zufälliges Element aus jeder Kategorie abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage