我有一个数据库Items
表看起来像这样:
id
name
category (int)
有几十万条记录。每个item
可以是 7 种不同的之一categories
,对应于categories
table:
id
category
我想要一个从每个类别中随机选择 1 个项目的查询。解决这个问题的最佳方法是什么?我知道使用Order By rand()
and 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 BY
and ORDER BY
子句中,分组是在排序之前执行的。这就是我使用两个查询的原因:第一个查询对结果进行排序,第二个查询对结果进行分组。
我知道这个查询不会赢得任何比赛。我愿意接受建议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)