【发布时间】:2015-02-17 23:57:45
【问题描述】:
在我的 mysql 查询中,我尝试获取所有线程的最新行。
$query = "SELECT th.id, tm.message, tm.date_sent, tm.date_sent>tu.last_read_date AS new
FROM thread th
JOIN thread_user tu ON th.id=tu.thread_id AND tu.user_id={$user_id}
JOIN thread_message tm ON th.id=tm.thread_id
JOIN (
SELECT thread_id, MAX(date_sent) date_sent
FROM thread_message
GROUP BY thread_id
) q ON tm.thread_id = q.thread_id AND tm.date_sent = q.date_sent
ORDER BY tm.date_sent DESC";
这可行,但问题是,如果有两行或多行的日期是最新的并且它们是相同的日期,那么它将与它们一起加入。我需要第三个 join 语句最多加入 1 行。
我也不想假设最大的 id 意味着它的最新行,因为我以后总是可以手动更改日期。
有谁知道如何解决这个问题?
谢谢
【问题讨论】:
-
什么决定了应该在关系之间返回哪条消息?您可以为每个组建立一个行号,然后只返回每组中的第一个...
-
如果线程中有超过 1 条具有相同最近日期的消息,那么它应该选择具有最大 id 值的消息。我该如何建立那个行号?
-
其实,如果最大id,不是日期最近的那一行呢?
-
我刚试了,结果没有返回任何记录。
-
好点...也许你需要那个行号...
标签: php mysql join inner-join