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