2

我有posts桌子。每个帖子都有topic_id对应于表中相应id字段的字段topics

我需要按表topics中的date_created字段排序posts

此外,每个主题都有forum_id,我只需要显示和排序特定的主题forum_id

我试过这样的事情:

SELECT 
   topics.id, topics.title 
FROM 
   topics RIGHT JOIN posts ON topics.id = posts.topic_id
WHERE 
   topics.forum_id = 1 
ORDER BY 
   posts.date_created DESC

然而,并非每个主题都有与之相关的帖子。那些没有任何帖子的人不会被退回。

如何解决?

4

3 回答 3

1

尝试使用 LEFT JOIN 而不是 RIGHT JOIN

于 2012-12-18T12:45:51.717 回答
1
SELECT 
   topics.id, topics.title 
FROM 
   (topics RIGHT JOIN posts ON (topics.id = posts.topic_id))  
WHERE 
   topics.forum_id = 1 
ORDER BY 
   posts.date_created DESC

试试这个

于 2012-12-18T12:47:47.163 回答
0

可能因为帖子上没有数据而丢失了行。尝试使用 ifnull 函数强制转换 null 值,如下所示:

SELECT 
   topics.id, topics.title 
FROM 
   topics LEFT JOIN posts ON topics.id = posts.topic_id
WHERE 
   topics.forum_id = 1 
ORDER BY 
   ifnull(posts.date_created, '1900-01-01 00:00:00') DESC
于 2012-12-18T13:22:37.787 回答