0

このために、典型的な MySQL データベースをセットアップしました: post テーブル、user テーブル、comment テーブル。

「前回のコメント以降に新しいコメントがある、コメントした投稿を取得する」などのクエリを実行する最良の方法は何ですか? 私のcomment_timestamp条件よりも大きい他のユーザーのcomment_timestampを以下のクエリにマージする方法を見つけるのに苦労しています:

私は大まかに持っています

SELECT * FROM posts 
WHERE posts.id IN 
( SELECT DISTINCT posts.id FROM posts,users,comments WHERE comments.post_id = post.id AND comments.user_id = $current_user_id ) AND .. something to filter only comments where timestamp is greater than mine

1 つのセットをループして MySQL の外部でフィルター処理できることはわかっていますが、可能であればすべて MySQL で実行したいと考えています。おそらく結合でこれを行うより良い方法があることは知っていますが、結合の両方の部分の間で「私の」最後のコメントの comment_timestamp を移動する方法がわかりません

user table
-----
id

posts table
------
id
user_id

comments table
-------
id
user_id
post_id
comment_timestamp
4

1 に答える 1

1
SELECT DISTINCT p.*
FROM posts p
INNER JOIN comments c
ON c.post_id = p.id
WHERE c.comment_timestamp > (
   SELECT MAX(c2.comment_timestamp)
   FROM comments c2
   WHERE c2.post_id = c.post_id
   AND c2.user_id = $current_user_id
) 

現在のユーザーが作成した最新のコメントよりも大きいタイムスタンプ値を持つ別のユーザーが作成したコメントを持つ各投稿の投稿データを選択します。投稿には現在のユーザーの最新のコメントの後に複数のコメントが含まれる場合があるため、各投稿を 1 回だけ取得するために Distinct が含まれています。

SQL フィドル。フィドルは、現在のユーザーの ID が 100 であると想定し、次のサンプル ケースを提供します。

  • 最新のコメントが現在のユーザーのもので、他のユーザーが以前にコメントした投稿
  • 現在のユーザーがコメントし、その後他のユーザーがコメントした投稿
  • 現在のユーザーがコメントしていないが、他のユーザーがコメントしている投稿
  • コメントのない投稿
  • 現在のユーザーからのコメントのみの投稿
于 2013-07-09T19:44:33.057 に答える