首页 > 数据库 > mysql教程 > 如何在MySQL中高效地查询每个类别中的一个随机项?

如何在MySQL中高效地查询每个类别中的一个随机项?

DDD
发布: 2024-12-28 00:23:09
原创
678 人浏览过

How to Efficiently Query One Random Item from Each Category in MySQL?

从每个 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板