从每个 MYSQL 类别中查询随机项
数据库系统会遇到从每个类别中选择随机记录的情况是很常见的。考虑一个具有 Items 表的数据库,其中包含属于不同类别的项目,每个类别都有其唯一的 ID。单独的类别表提供类别的名称和 ID。
要为每个类别选择一个随机项目,我们可以利用分组和随机化的组合。
首先,我们加入项目和类别 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()
为了将每个类别限制为一个项目,我们使用部分 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中高效地查询每个类别中的一个随机项?的详细内容。更多信息请关注PHP中文网其他相关文章!