2012-09-16 46 views
0

我有這樣的代碼:訂購最新的發佈日期在MySQL

$result = mysql_query("SELECT 
f_type.`id` AS type_id, 
f_type.`name` AS type_name, 
f_thread.`id` AS thread_id, 
f_thread.`uid`, 
f_thread.`title` AS thread_title, 
f_thread.`hits`, 
u.`username` 

FROM `forum_type` AS f_type 
LEFT JOIN `forum_thread` AS f_thread 
ON f_type.`id` = f_thread.`type_id` 
LEFT JOIN `users` AS u 
ON u.`id` = f_thread.`uid` 
LEFT JOIN `forum_posts` AS f_posts 
ON f_posts.`type_id` = f_thread.`id`  

WHERE f_type.`id` = '".$_GET['type_id']."' 
ORDER BY f_posts.`date` DESC 
") or die (mysql_error()); 

講的是一個論壇,我想線程像檢查其職位是在這個論壇的最新排序。

我使用forum_type(f_type)作爲論壇的子類別,它是頂級類別。因此,它的層次結構就像這個名單:

  1. 論壇
  2. forum_type
  3. forum_thread
  4. forum_posts

而且像我寫的代碼查詢,我想訂購由最新的發佈日期...但它並沒有按此順序。我實際上並不知道它的命令......看不到一個方案。我想這個問題是由於這些多個連接造成的,但我不確定。

我將不勝感激任何建議!

回答

1

那麼,如果你想列出線程,你可能希望按線程分組,併爲每個線程選擇最大發布日期。

SELECT 
f_thread.`id` AS thread_id, 
f_thread.`uid`, 
f_thread.`title` AS thread_title, 
f_thread.`hits`, 
u.`username`, 
max(f_posts.date) as last_post_date 

FROM `forum_thread` AS f_thread 
LEFT JOIN `users` AS u 
ON u.`id` = f_thread.`uid` 
LEFT JOIN `forum_posts` AS f_posts 
ON f_posts.`type_id` = f_thread.`id`  

WHERE f_thread.type_id = ".$_GET['type_id']." 

GROUP BY thread_id 
ORDER BY last_post_date DESC 

希望有所幫助。 f_posts.type_id有點懷疑,也許在表中有一個thread_id?

+0

對不起,有任何混淆。我認爲這個帖子是正確的。 – gandaliter

+0

不過,它不會那樣工作。可悲的是。是否有太多的連接或錯誤的連接類型? – Vay

+0

取決於你正在嘗試做什麼...如果你想單獨列出每個論壇類型中的線程,你可能不想加入類型,而是首先選擇類型,然後單獨選擇線程查詢。但是這與它無關,查詢應該可行,事情是我只是猜測架構,所以除非你更具描述性,否則我可以提出更多建議。 – fd8s0