获取论坛的最后一篇文章

时间:2014-06-24 14:08:32

标签: php sql

我建立了一个论坛系统,我在获取最后一篇文章时遇到了问题。

以下是查询:

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

问题是当我打开新主题时,除非我发表关于此主题的评论,否则不会出现。

2 个答案:

答案 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