dHello你可以帮我查询一下最新帖子对主题的排序吗?我的意思是,当有人发帖时我想要一个主题。以下是表格:
讨论
评论
这是我的代码,但我得到了重复的主题,但它们的顺序很好
select discussion.id_discution, discussion.name, discussion.id_category,
discussion.date, discussion.report, comments.id_comment, comments.id_pet_dem_des,
comments.date,comments.type
from discussion,comments
where discussion.id_discution=comments.id_discussion
AND type=3
order by comments.id_comment desc
答案 0 :(得分:2)
GROUP BY
讨论表的主键......
SELECT
discussion.id_discution, discussion.name, discussion.id_category, discussion.date, discussion.report
FROM
discussion
INNER JOIN
comments
ON discussion.id_discution = comments.id_discussion
AND type=3
GROUP BY
discussion.id_discution
ORDER BY
MAX(comments.date) desc
注意:我没有在comments
子句中包含SELECT
表中的任何数据。
这是因为您只希望每次讨论都出现一次,但每次讨论都可以有很多评论。您要么多次出现讨论,要么包含评论,要么不在结果中包含评论数据。
您可以包含汇总值,例如COUNT(*)
,以显示有多少条评论MAX(comments.date)
,以显示评论最近评论的内容等等。< / p>
答案 1 :(得分:2)
对于那些感兴趣的人,这里有一个应该适用于所有RDBMS提供者的示例(尽管显然DB2保留COMMENT
和TYPE
...):
SELECT Discussion.discussionId, Discussion.title,
Discussion.categoryId, Discussion.startedAt -- + other columns
FROM Discussion
LEFT JOIN (SELECT discussionId, MAX(madeAt) as madeAt
FROM Comment
WHERE type = 3
GROUP BY discussionId) as Most_Recent
ON Most_Recent.discussionId = Discussion.discussionId
ORDER BY COALESCE(Most_Recent.madeAt, Discussion.startedAt) DESC
(有一个有效的SQLFiddle example。)
其他说明:
startedAt
之类的东西来表达清楚。<entity_name> + 'Id'
,而不是相反(至少,大多数人会期望这种格式)。FROM
子句(通常在INNER JOIN
期间你没事,但事情变得奇怪,所以在那些时候练习正确的行为。)