Mysql 按另一个表排序结果?
我正在开发一个定制的论坛系统,我想知道如果用户在其中发帖,如何将一个帖子放在列表的顶部 我有这个问题要问Mysql 按另一个表排序结果?,mysql,Mysql,我正在开发一个定制的论坛系统,我想知道如果用户在其中发帖,如何将一个帖子放在列表的顶部 我有这个问题要问 SELECT user_threads.threadID, user_threads.title, user_threads.uid, user_threads.postDate, thread_messages.posted FROM user_threads, thread_messages WHERE parent = :parent GROUP BY
SELECT
user_threads.threadID,
user_threads.title,
user_threads.uid,
user_threads.postDate,
thread_messages.posted
FROM
user_threads,
thread_messages
WHERE
parent = :parent
GROUP BY
user_threads.title
ORDER BY
thread_messages.posted
DESC
这似乎不起作用。如果我发布了一个新的线程,它将保持在列表中的位置 缺少联接条件。目前,您得到的是
用户线程
和线程消息
的叉积。这意味着您在结果中获得了每个线程和帖子的行
尝试添加一些链接
FROM
user_threads
JOIN
thread_messages USING(threadID)
在结果集中只获取一次每个线程。您需要通过
threadID
连接表。此外,如果您只希望每个线程有一行,则需要使用最后一篇文章的日期
SELECT
user_threads.threadID,
user_threads.title,
user_threads.uid,
user_threads.postDate,
MAX(thread_messages.posted) AS last_post
FROM
user_threads
LEFT JOIN
thread_messages ON thread_messages.threadID = user_threads.threadID
WHERE
parent = :parent
GROUP BY
user_threads.threadID
ORDER BY
last_post DESC
我使用了
LEFT JOIN
,这样即使线程在thread\u消息中没有任何内容,也会显示线程。如果不需要,您可以使用常规的连接(也称为内部连接)。您需要将表绑定在一起。您可以通过向WHERE
添加类似user\u threads.threadID=thread\u messages.threadID
(猜测第二列名称,需要检查)的内容或通过如下方式重写查询来完成此操作:
SELECT
user_threads.threadID,
user_threads.title,
user_threads.uid,
user_threads.postDate,
thread_messages.posted
FROM
user_threads
JOIN
thread_messages ON thread_messages.threadID = user_threads.threadID
WHERE
parent = :parent
GROUP BY
user_threads.title
ORDER BY
thread_messages.posted
DESC
而且也不是,你可能应该替换它
GROUP BY
user_threads.title
大概是
GROUP BY
user_threads.threadID
或
你的线程标题迟早会被重用,而ID应该是“永远”唯一的。此外,threadID很可能会导致更快的查询,因为数据库只需要比较数字和不同长度的文本。使用“用户线程”和“线程消息”表的别名,即
SELECT
A.threadID,
A.title,
A.uid,
A.postDate,
B.posted
FROM
user_threads A,
thread_messages B
WHERE
parent = :parent
//also do it with 'parent' field if parent is a field of user_threads
//A.parent else thread_messages B.parent
GROUP BY
A.title
ORDER BY
B.posted
DESC
为什么不按用户\u线程进行分组。线程ID
?文本-分组依据
的性能较差,多个线程可能具有相同的标题。这就解决了。。。我得等一分钟才能接受,但我做到了。谢谢你,先生,你是一位绅士和学者。我不认为这会改变任何事情。
SELECT
A.threadID,
A.title,
A.uid,
A.postDate,
B.posted
FROM
user_threads A,
thread_messages B
WHERE
parent = :parent
//also do it with 'parent' field if parent is a field of user_threads
//A.parent else thread_messages B.parent
GROUP BY
A.title
ORDER BY
B.posted
DESC