我建立了一个论坛系统,我在获取最后一篇文章时遇到了问题。
以下是查询:
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
问题是当我打开新主题时,除非我发表关于此主题的评论,否则不会出现。
答案 0 :(得分: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;
答案 1 :(得分:0)
我将假设帖子if在数据库中,但不会显示在您想要的网页上。也许问题是ORDER BY将空值置于底部so
ORDER BY ldate IS NULL DESC, ldate DESC