sql >> Database >  >> RDS >> Mysql

MYSQL Selecteer één willekeurig record uit elke categorie

Deze zoekopdracht retourneert alle items die in willekeurige volgorde aan categorieën zijn toegevoegd:

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()

Om elke categorie tot één categorie te beperken, wikkelt u de zoekopdracht in een gedeeltelijk 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

Merk op dat wanneer een zoekopdracht zowel GROUP BY en ORDER BY clausule, wordt de groepering uitgevoerd vóór het sorteren. Daarom heb ik twee zoekopdrachten gebruikt:de eerste sorteert de resultaten, de tweede groepeert de resultaten.

Ik begrijp dat deze vraag geen enkele race gaat winnen. Ik sta open voor suggesties.



  1. Propagation altijd ingeschakeld houden in Oracle Streams

  2. Adminer - Een geavanceerde webgebaseerde databasebeheertool voor Linux

  3. Fix Msg 8114 "Fout bij het converteren van gegevenstype varchar naar numeriek" in SQL Server

  4. PHP mysql_stmt::fetch() geeft PHP Fatal error-geheugen uitgeput