0

私はフォーラムを構築していますが、いくつかの問題が発生しました。

基本的なデータベース構造は次のようになります。

users
| user_id | username

categories
| category_id | category_name |

forum_posts
| post_id | ref_post_id (FK) | ref_category_id (FK) | ref_user_id (FK) | post_date |

ref_post_idが0の場合、それはタイトルを持つスレッドのメイン投稿であることを意味します。スレッドへの回答の場合、ref_post_idはメイン投稿のpost_idと同じです。ご理解頂けるとありがたいです。

各カテゴリの最新の投稿を取得するにはどうすればよいですか?投稿スレッドのタイトルと、ユーザーテーブルのユーザー名を含みます。テーブル構造を変更して、「latest_post_id」フィールドをcategoriesテーブルなどに追加する必要がありますか?

あなたの助けにとても素晴らしい。同様の質問があることは知っていますが、latest_post_idとそのすべてをcategoriesテーブルに保存する必要があるのか​​、それともページの読み込みごとにすべてを取得するための巨大なクエリを使用するのかについても疑問に思っています。

編集2:これが私の現在の質問です:

SELECT category_id, name, 
(SELECT COUNT(*) FROM forum_posts WHERE ref_category_id = category_id AND ref_post_id = 0) count_threads
(
SELECT title, ref_user_id, username FROM forum_posts
LEFT JOIN users ON user_id =     ref_user_id
WHERE latest_post_id = (SELECT MAX(latest_post_id) FROM forum_posts WHERE    ref_category_id = category_id LIMIT 1)
)
FROM forum_categories
4

1 に答える 1

0

作成日がある場合は、MAX 日付の日付を取得する必要があります。そうでない場合は、MAX(post_id) を使用できますが、ユーザーに投稿の編集を許可し、作成または編集された最新のものを取得したい場合データベースに変更日を追加する必要があります。

最新の投稿を取得するには:

SELECT * FROM forum_posts p 
INNER JOIN users u ON p.ref_user_id=u.user_id
WHERE `post_id`=(SELECT max(`post_id`) FROM forum_posts WHERE ref_category_id=$value);

日付を使用している場合は、代わりにそのフィールドを使用してくださいpost_id

于 2013-01-09T16:16:54.093 に答える