2014-02-05 177 views
0

我有一个旧的论坛上,我很多年前建立了一个我成了网站上的只读部分。作为编程练习我试图削减的代码尽管可怕数据库设计中使用的量。MYSQL连接查询结果

我试图实现的是在回复页面上:单个查询显示第一篇文章(愚蠢地存储在'主题'表格中),然后是'回复表格中的其他帖子。

删节表:

'replies' 
topicID 
posted_by 
body 
date_posted 

'topics' 
topicID 
subject 
body 
posted_by 
date_posted 

我试图让形式为:

从后面回复“主题”最初发表date_posted排序(最早的第一)。

这里是我一直在摆弄与查询:

SELECT DISTINCT 
r.body, r.posted_by, r.date_posted, t.body, t.date_posted, t.posted_by, t.subject 
FROM 
replies r 
LEFT JOIN topics t 
    ON r.topicID = t.topicID 
WHERE 
r.topicID = 2372 
ORDER BY 
t.posted_by DESC, 
r.date_posted DESC 

有没有人有关于如何调整这让我期望的方案什么想法?

回答

1

联合查询应该提供你正在寻找的数据:

SELECT topicID, subject, body, posted_by, date_posted 
FROM topics 
WHERE topicID = 2372 
UNION 
SELECT r.topicID, t.subject, r.body, r.posted_by, r.date_posted 
FROM replies r 
    INNER JOIN topics t ON r.topicID = t.topicID 
WHERE t.topicID = 2372 
ORDER BY r.date_posted DESC; 
+0

您好,感谢,这是极好的。它做了我想要的几乎所有东西。直到出现错误的'ORDER BY'。我与它摆弄,看看我能做些什么:) 编辑:我只是放弃了'r.'别名,它的工作^^ –

+1

哎呀,很抱歉。作为替代方案,你可以换用括号联合查询的第二部分,以的种类仅适用于答复。 –