2010-11-03 103 views
0

我正在一个自定义论坛,我注意到我做错了什么。我正在根据线程日期对线程进行排序。我需要根据线程中最后发布的日期来组织线程。排序论坛最后发布日期

我尝试了以下,但它有问题。它多次列出条目。

$thread_sql = "SELECT forum_threads.thread_id AS thread_id, 
         forum_threads.thread_title AS thread_title, 
         forum_threads.thread_description AS thread_description, 
         forum_threads.forum_id AS forum_id, 
         forum_threads.thread_postdate AS thread_date, 
         forum_threads.thread_icon AS thread_icon, 
         forum_threads.thread_views AS thread_views, 
         forum_threads.user_id AS user_id, 
         users.user_firstname AS user_firstname, 
         users.user_lastname AS user_lastname 
       FROM forum_threads 
      INNER JOIN users ON forum_threads.user_id = users.user_id 
      INNER JOIN forum_posts ON forum_threads.thread_id = forum_posts.thread_id 
       WHERE forum_threads.forum_id='$_GET[f]' 
      ORDER BY forum_posts.post_date DESC "; 

任何ide我怎么会根据最后回复线程的日期来订购线程?

回答

1

首先,我强烈建议将last_post_date添加为forum_thread表中的一列,每次将帖子添加到该线程时都会更新该列。否则,由于加入,您会在论坛中获得更多线程时出现性能问题。

无论如何,回答你的问题:

$thread_sql = "SELECT forum_threads.thread_id AS thread_id, 
        forum_threads.thread_title AS thread_title, 
        forum_threads.thread_description AS thread_description, 
        forum_threads.forum_id AS forum_id, 
        forum_threads.thread_postdate AS thread_date, 
        forum_threads.thread_icon AS thread_icon, 
        forum_threads.thread_views AS thread_views, 
        forum_threads.user_id AS user_id, 
        users.user_firstname AS user_firstname, 
        users.user_lastname AS user_lastname, 
        max(forum_posts.post_date) last_post_date 
      FROM forum_threads 
     INNER JOIN users ON forum_threads.user_id = users.user_id 
     INNER JOIN forum_posts ON forum_threads.thread_id = forum_posts.thread_id 
      WHERE forum_threads.forum_id='$_GET[f]' 
      group by 
        forum_threads.thread_id, 
        forum_threads.thread_title, 
        forum_threads.thread_description, 
        forum_threads.forum_id, 
        forum_threads.thread_postdate, 
        forum_threads.thread_icon, 
        forum_threads.thread_views, 
        forum_threads.user_id, 
        users.user_firstname, 
        users.user_lastname 
     ORDER BY max(forum_posts.post_date) DESC "; 

另外,我觉得这样的事情可能会工作得更快:

SELECT forum_threads.thread_id AS thread_id, 
     forum_threads.thread_title AS thread_title, 
     forum_threads.thread_description AS thread_description, 
     forum_threads.forum_id AS forum_id, 
     forum_threads.thread_postdate AS thread_date, 
     forum_threads.thread_icon AS thread_icon, 
     forum_threads.thread_views AS thread_views, 
     forum_threads.user_id AS user_id, 
     users.user_firstname AS user_firstname, 
     users.user_lastname AS user_lastname 
     (SELECT MAX(post_date) 
     FROM forum_posts 
     WHERE thread_id = forum_threads.thread_id) last_post_date 
    FROM forum_threads 
    INNER JOIN users ON forum_threads.user_id = users.user_id 
    WHERE forum_threads.forum_id='$_GET[f]' 
    ORDER BY last_post_date DESC;