首頁 > 資料庫 > mysql教程 > 如何在MySQL中有效率地查詢每個類別中的一個隨機項?

如何在MySQL中有效率地查詢每個類別中的一個隨機項?

DDD
發布: 2024-12-28 00:23:09
原創
678 人瀏覽過

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

從每個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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板