通过另一张表订购结果?

时间:2014-06-02 21:11:45

标签: 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
    user_threads.title
ORDER BY 
    thread_messages.posted
DESC

哪个似乎不起作用。如果我在新帖子中发帖,它仍然在列表中的位置。

4 个答案:

答案 0 :(得分:1)

您需要通过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_messages中没有任何内容,也会显示主题。如果不需要,您可以使用常规JOIN(又名INNER JOIN)。

答案 1 :(得分:0)

您缺少JOIN条件。目前,您正在获得user_threadsthread_messages的叉积。这意味着你为每个线程获得了行并在结果中发布。

尝试添加一些链接

FROM 
    user_threads
JOIN
    thread_messages USING(threadID)

在结果集中只获取一次每个线程。

答案 2 :(得分:0)

您需要将表格绑在一起。您可以通过向user_threads.threadID = thread_messages.threadID添加类似WHERE(猜测并需要检查第二列名称)的内容或通过重写查询来执行此操作:

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

GROUP BY
    user_threads.threadID, user_threads.title

你的线程标题迟早可以重复使用,而ID应该是“永远”唯一的。 threadID最有可能导致更快的查询,因为数据库只需要比较数字与不同长度的文本。

答案 3 :(得分:0)

对表'user_threads'和'thread_messages'使用别名,即。

 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