0

私はこのコードを持っています:

$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

そして、私がコードで書いたクエリのように、私は最新の投稿日で注文したかったのですが...それでは注文しません。実際に何が注文されているのかわかりません...スキームがわかりません。これらの複数の結合が原因でこの問題が発生したと思いますが、よくわかりません。

何か提案をいただければ幸いです。

4

1 に答える 1

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があるのではないでしょうか。

于 2012-09-16T15:20:51.083 に答える