我有一个很久以前建立的旧论坛,我在网站上变成了一个只读部分。作为编程练习,尽管 可怕的 数据库设计,我试图减少使用的代码量。
我想要实现的目标是在回复页面上:一个查询显示第一篇文章(存储在'主题'表格中),然后是其他帖子来自&#39 ;回复表。
简陋的表格:
'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
有没有人有任何想法如何调整这个以获得我想要的方案?
答案 0 :(得分:1)
UNION查询应该提供您正在寻找的数据:
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;