mysql - 检索其元记录包含的所有记录,作者 ID 具有最新日期
问题描述
我有 2 张桌子。第一个叫subject
,另一个叫comment
。很明显,主题表与评论有一对多的关系。以下是这些表的架构
subject
::
__________________________
| id | subject_id | title |
--------------------------
| 1 | 1 | health|
--------------------------
| 2 | 2 | sport |
---------------------------
| 3 | 5 | food |
---------------------------
评论:
----------------------------------------
| id | user_id | subject_id | date |
----------------------------------------
| 1 | 10 | 1 | 2018-07-04|
-----------------------------------------
| 2 | 9 | 1 | 2018-07-03|
-----------------------------------------
| 3 | 10 | 1 | 2018-07-02|
----------------------------------------
我想检索所有具有 user_id=10 并具有最大日期的 subject_id 表单主题表。在这种情况下,结果必须是这样的:只有一条记录,它的 subject_id =1;
$query = "SELECT subject_id FROM subject AS s, comment AS c WHERE
s.subject_id = c.subject_id AND c.user_id = 10
GROUP BY MAX(c.date)
但不幸的是,它会根据与特定主题相关的评论数量返回 subject_id:
首先我可以选择最大日期的所有评论
SELECT * FROM comment GROUP BY subject_id HAVING max(date)
未回答的问题是我如何过滤这些记录以检索 user_id = 10 的最新评论
解决方案
您不应该像以前那样对聚合进行分组。如果这是整个查询,您应该按日期排序并将输出限制在第一行:
select s.subject_id
from subject s
inner join comment c on
s.subject_id = c.subject_id
where c.user_id = 10
order by c.date desc
limit 1
请注意,我已经用关键字替换了老式的,
连接语法JOIN
推荐阅读
- html - 做什么
- c - kaprekar 数字计算失败超过两位数
- java - 我们可以在不循环的情况下将地图数组转换为模型实体类[POJO]的数组吗?
- android - 将我的 ionic 应用程序 apk 上传到 Google Play 控制台时出错
- php - 检查已经存在的用户名或不是 MySQL,PHP
- oracle - 验证在 oracle apex 的页面提交上不起作用
- android - 如何在控制台上显示所选项目
- java - Java 程序在 netbeans 中编译,但不在 CMD 中,包不存在
- arduino - Arduino 发送不一致的 UDP 消息
- javascript - 添加到使用 JavaScript 生成的输入字段的数据库数组