使用单个查询选择每个类别中的最新项目
在一个按名为category_id
的字段分类的项目数据库中,任务是检索一个类别列表,每个类别都包含其四个最近列出的项目。与其为每个类别单独查询数据库,不如使用单个SQL查询来优化数据库调用。
使用外部联接的解决方案:
以下查询使用外部联接来识别和排除在同一类别中具有更新对应项目的项目:
SELECT i1.* FROM item i1 LEFT OUTER JOIN item i2 ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id) GROUP BY i1.category_id, i1.item_id HAVING COUNT(*) <= 4;
此查询使用LEFT OUTER JOIN
将每个项目(i1
)与其更新且具有相同类别的项目集(i2
)连接起来。COUNT(*)
用于计算每个类别中每个项目的匹配项数量。HAVING
子句过滤掉具有超过四个匹配项的项目,从而确保仅选择每个类别中的四个最新项目。
使用MySQL用户变量的解决方案:
此解决方案利用MySQL的用户变量功能来跟踪组号和行号:
SELECT * FROM ( SELECT i.*, @r := IF(@g = category_id, @r+1, 1) AS rownum, @g := category_id FROM (SELECT @g:=null, @r:=0) AS _init CROSS JOIN item i ORDER BY i.category_id, date_listed DESC ) AS t WHERE t.rownum <= 4;
在此查询中,用户定义的变量@g
和@r
用于跟踪当前类别和行号,确保仅选择每个类别中的前四个项目。
使用MySQL窗口函数的解决方案 (MySQL 8.0.3 ):
MySQL 8.0.3引入了对SQL标准窗口函数的支持,提供了一种更简洁高效的解决方案:
WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY date_listed DESC) AS rownum FROM item ) SELECT * FROM numbered_item WHERE rownum <= 4;
此查询使用PARTITION BY category_id ORDER BY date_listed DESC
子句按类别对结果集进行分区,并按每个分区中的date_listed
列降序排列项目。然后,ROW_NUMBER()
窗口函数为每个分区分配连续的行号,从而能够选择每个类别的前四个项目。
以上是如何使用单个 SQL 查询检索每个类别的四个最新项目?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文探讨了Docker中的优化MySQL内存使用量。 它讨论了监视技术(Docker统计,性能架构,外部工具)和配置策略。 其中包括Docker内存限制,交换和cgroups

本文介绍了MySQL的“无法打开共享库”错误。 该问题源于MySQL无法找到必要的共享库(.SO/.DLL文件)。解决方案涉及通过系统软件包M验证库安装

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

本文比较使用/不使用PhpMyAdmin的Podman容器直接在Linux上安装MySQL。 它详细介绍了每种方法的安装步骤,强调了Podman在孤立,可移植性和可重复性方面的优势,还

本文提供了SQLite的全面概述,SQLite是一个独立的,无服务器的关系数据库。 它详细介绍了SQLite的优势(简单,可移植性,易用性)和缺点(并发限制,可伸缩性挑战)。 c

本指南展示了使用自制在MacOS上安装和管理多个MySQL版本。 它强调使用自制装置隔离安装,以防止冲突。 本文详细详细介绍了安装,起始/停止服务和最佳PRA

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。