我构建了一个论坛系统,但在获取最后一篇帖子时遇到问题。
这是查询:
SELECT
posts.date, posts.author AS pauthor, topics.*,
CASE
WHEN posts.date > topics.date THEN posts.date
WHEN topics.date > posts.date THEN topics.date
END AS ldate
FROM
posts, topics
WHERE
topics.id = posts.topic_id
AND forum_id = ?
ORDER BY
ldate DESC
LIMIT 1
问题是当我打开一个新主题时,除非我对此主题发表评论,否则不会出现。
这是使用正确的
join
语法和表别名重写的查询:
SELECT p.date, p.author AS pauthor, t.*,
(CASE WHEN p.date > t.date THEN p.date
WHEN t.date > p.date THEN t.date
END) AS ldate
FROM posts p JOIN
topics t
ON t.id = p.topic_id
WHERE forum_id = ?
ORDER BY ldate DESC
LIMIT 1;
你需要一个
left outer join
和更多的逻辑:
SELECT p.date, p.author AS pauthor, t.*,
(CASE WHEN t.date IS NULL THEN p.date
WHEN p.date > t.date THEN p.date
WHEN t.date > p.date THEN t.date
END) AS ldate
FROM topics t LEFT JOIN
posts p
ON t.id = p.topic_id
WHERE forum_id = ?
ORDER BY ldate DESC
LIMIT 1;
我假设该帖子位于数据库中,但未显示在您想要的网页上。也许问题是 ORDER BY 将空值放在底部so
ORDER BY ldate IS NULL DESC, ldate DESC
我在此链接中得到了回复蒙特雷互联网奉献者