從每個MYSQL 類別中查詢隨機項目
資料庫系統會遇到從每個類別中選擇隨機記錄的情況是很常見的。考慮一個具有 Items 表的資料庫,其中包含屬於不同類別的項目,每個類別都有其唯一的 ID。單獨的類別表提供類別的名稱和 ID。
要為每個類別選擇一個隨機項目,我們可以利用分組和隨機化的組合。
首先,我們加入項目和類別ID 上的類別表將項目與其各自的類別相關聯:
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():
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()
為了將每個類別限制為一個項目,我們使用部分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
此查詢有效地按類別ID 對隨機排序的項目進行分組,並選擇每組中的第一個項目。分組運算發生在排序之前,因此每個類別中都會保留隨機順序。
以上是如何在MySQL中有效率地查詢每個類別中的一個隨機項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!