ホームページ >データベース >mysql チュートリアル >MySQL の各カテゴリから 1 つのランダムな項目を効率的にクエリする方法は?

MySQL の各カテゴリから 1 つのランダムな項目を効率的にクエリする方法は?

DDD
DDDオリジナル
2024-12-28 00:23:09668ブラウズ

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

各 MYSQL カテゴリからのランダム項目のクエリ

データベース システムは、各カテゴリからランダム レコードを選択することが一般的なシナリオに遭遇します。さまざまなカテゴリに属し、それぞれに一意の ID を持つ項目が含まれる Items テーブルを持つデータベースを考えてみましょう。また、別のカテゴリ テーブルには、カテゴリの名前と ID が表示されます。

カテゴリごとに 1 つのランダムなアイテムを選択するには、グループ化とランダム化を組み合わせて利用できます。

まず、アイテムとアイテムを結合します。アイテムをそれぞれのカテゴリに関連付けるカテゴリ 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()

各カテゴリを 1 つの項目に制限するために、部分的な 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 の各カテゴリから 1 つのランダムな項目を効率的にクエリする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。