2010-11-03 85 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;