首页 > 解决方案 > 检索其元记录包含的所有记录,作者 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 的最新评论

标签: mysql

解决方案


您不应该像以前那样对聚合进行分组。如果这是整个查询,您应该按日期排序并将输出限制在第一行:

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


推荐阅读