Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL Seleziona un record casuale da ciascuna categoria

Questa query restituisce tutti gli elementi uniti alle categorie in ordine casuale:

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

Per limitare ogni categoria a una, avvolgi la query in un parziale 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

Nota che quando una query ha entrambi GROUP BY e ORDER BY clausola, il raggruppamento viene eseguito prima dell'ordinamento. Questo è il motivo per cui ho utilizzato due query:la prima ordina i risultati, la seconda raggruppa i risultati.

Capisco che questa domanda non vincerà nessuna gara. Sono aperto a suggerimenti.