在我正在做的一个小组项目(论坛)中,我一直坚持通过上一个回复对论坛话题进行排序的任务。我知道标题有些令人困惑,但我们会尝试了解下面的情景。
我有两个表,它们有一些外键和关系键,我想从包含最新帖子的线程的表中选择的行和该线程的相关ID。
两个数据库表如下所示:
正如您在上面所看到的,一些应该能够与另一个表中的键相关的表键具有不同的名称。此外,我需要链接/分组/加入ForumPost.ThreadID到ForumThread.ID,但我目前的所有努力只让我为每个线程的回复获得多行,这意味着一个线程,例如,在对结果进行排序后,2个回复将显示两次。
这是我到目前为止所尝试的内容:
尝试按上一篇文章排序线程:
SELECT DISTINCT ForumPost.ThreadID,
ForumThread.*
FROM ForumThread
LEFT JOIN ForumPost
ON ForumThread.ID = ForumPost.ThreadID
GROUP BY ForumPost.ThreadID
ORDER BY ForumPost.CreationDate DESC,
ForumThread.ID DESC
LIMIT $offset, 10
SELECT ForumThread.*
FROM ForumThread
LEFT JOIN ForumPost
ON ForumThread.ID = ForumPost.ThreadID
GROUP BY ForumPost.ThreadID,
ForumThread.ID
ORDER BY ForumPost.CreationDate DESC,
ForumThread.ID DESC
LIMIT $offset, 10
SELECT DISTINCT ForumThread.*
FROM ForumThread
INNER JOIN ForumPost
ON ForumThread.ID = ForumPost.ThreadID
GROUP BY ForumThread.ID
ORDER BY ForumPost.CreationDate DESC,
ForumThread.ID DESC
LIMIT $offset, 10
原始简单查询:
SELECT *
FROM ForumThread
ORDER BY ID DESC
LIMIT $offset, 10
在这种情况下,您是否只是建议单独获取信息,并使用PHP之类的语言(显然这是我们在此项目中使用的)来关联两个不同的MySQL结果并对它们进行排序,或者你有更快更紧凑的解决方案吗?
请注意;对于那些推荐我使用MySQLi的人,我可以确认我的小组已经考虑过是否使用MySQLi或MySQL,尽管我们的学习评论仅涵盖了过时的MySQL材料,这使得我们重视学习MySQLi的可能性。这个项目的最后期限很短。
答案 0 :(得分:0)
这是使用相关子查询的可能性;希望它有所帮助
SELECT
ForumThread.id, Title,
(SELECT MAX(CreationDate) FROM ForumPost
WHERE
ForumPost.ThreadID = ForumThread.id) AS lastentry
FROM ForumThread group by 1, 2 order by 3 desc;