MYSQL从每个类别中选择一个随机记录
我有一个带有Items
表的数据库,看起来像这样:
idname
category (int)
有数十万条记录。每个item
可以在7个不同categories
的categories
表之一中,对应于一个表:
idcategory
我想要一个从每个类别中选择1个随机项目的查询。解决这个问题的最佳方法是什么?我知道使用Order By rand()
和LIMIT
1用于类似的随机查询,但是我从未做过这样的事情。
回答:
此查询以随机顺序返回加入类别的所有项目:
SELECTc.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()
要将每个类别限制为一个类别,请将查询包装在 partial中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
请注意,当查询同时具有GROUP BY
and ORDER
BY子句时,将在排序之前执行分组。这就是为什么我使用了两个查询的原因:第一个对结果进行排序,第二个对结果进行分组。
我了解此查询不会赢得任何比赛。我愿意提出建议。
以上是 MYSQL从每个类别中选择一个随机记录 的全部内容, 来源链接: utcz.com/qa/422238.html