djt*_*djt 6 mysql sql random sql-order-by
我有一个数据库,其Items表格看起来像这样:
id
name
category (int)
Run Code Online (Sandbox Code Playgroud)
有几十万条记录.每个都item可以是7个不同的一个categories,对应一个categories表:
id
category
Run Code Online (Sandbox Code Playgroud)
我想要一个从每个类别中选择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()
Run Code Online (Sandbox Code Playgroud)
要将每个类别限制为一个,请将查询包装为部分 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
Run Code Online (Sandbox Code Playgroud)
请注意,当查询同时具有GROUP BY和ORDER BY子句时,将在排序之前执行分组.这就是我使用两个查询的原因:第一个对结果进行排序,第二个对结果进行分组.
我知道这个查询不会赢得任何比赛.我愿意接受建议.
| 归档时间: |
|
| 查看次数: |
8742 次 |
| 最近记录: |