MYSQL从每个类别中选择一个随机记录

我有一个带有Items表的数据库,看起来像这样:

id

name

category (int)

有数十万条记录。每个item可以在7个不同categoriescategories表之一中,对应于一个表:

id

category

我想要一个从每个类别中选择1个随机项目的查询。解决这个问题的最佳方法是什么?我知道使用Order By rand()LIMIT

1用于类似的随机查询,但是我从未做过这样的事情。

回答:

此查询以随机顺序返回加入类别的所有项目:

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

要将每个类别限制为一个类别,请将查询包装在 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 BYand ORDER

BY子句时,将在排序之前执行分组。这就是为什么我使用了两个查询的原因:第一个对结果进行排序,第二个对结果进行分组。

我了解此查询不会赢得任何比赛。我愿意提出建议。

以上是 MYSQL从每个类别中选择一个随机记录 的全部内容, 来源链接: utcz.com/qa/422238.html

回到顶部