获取论坛最后的帖子

问题描述 投票:0回答:3

我构建了一个论坛系统,但在获取最后一篇帖子时遇到问题。

这是查询:

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

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

php sql
3个回答
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;

0
投票

我假设该帖子位于数据库中,但未显示在您想要的网页上。也许问题是 ORDER BY 将空值放在底部so

ORDER BY ldate  IS NULL DESC, ldate  DESC

0
投票

我在此链接中得到了回复蒙特雷互联网奉献者

© www.soinside.com 2019 - 2024. All rights reserved.