2011-06-23 6 views
0

内部結合を含むと思われるSQLクエリを作成しようとしていますが、わかりません。されているcomments.idcomments.user_id(所有者)、comments.post_id(参照表をポストに)、posts.idposts.editor_id(2つのテーブルがあります内部結合を使用するSQLクエリを構築するのに役立つ

:多くの列の中で、コメント、投稿

は、以下の重要なものがあります。ここのモデルです人、すなわち投稿の所有者)。

は、私はどちらか

1)現在のユーザーが書いたことのコメントを取得したいので、何かのように:

select * from comments where user_id = <<current_user_id>> 

2)(current_userエディタであると仮定します)。あなたが作成した投稿に属するすべてのコメントを取得します。 これは私が持っているものですが、複数の行があります....私は何が欠けていますか?

select * FROM comments INNER JOIN posts ON comments.post_id = <<test_id>> 
WHERE posts.editor_id = <<current_user.editor_id>>; 

私にこれらの両方を含むSQLクエリを与えることができれば、それはすばらしいことになります。

ありがとうございます!

答えて

1

コメントごとに行を返すように、「複数行」の意味が不明です。 これはそれを行う必要があります。

SELECT comments.* 
FROM comments 
INNER JOIN posts 
ON comments.post_id = posts.id 
WHERE posts.editor_id = @editorID; 
+0

ありがとうございました! –

+0

しかし、これは最初の要件を満たしません。 "私は、1)現在のユーザーが書いたコメントを取得したい"。 –

+0

私の理解は、opが最初の例を満足し、2番目の例で問題を起こしていたことでした。 – TheRealTy

0

は、私は1)現在のユーザーのいずれかが書かれていたコメントを取得したいので、何かのようにします。select * USER_ID = <>

正しいのコメントから。それのどこが悪いんだい?

あなたが作成した投稿に属するすべてのコメントを取得します。これは私が持っているものですが、私は複数の行を取得します

まあ...あなたはそうしています。スキーマを見ると、実際に投稿には多くのコメントが含まれている可能性があります。 tyrongowerによって与えられたクエリは、あなたが望むことを行うべきです。あなたの要件に行く

0

、これはあなたのために働く必要があります。

SELECT * FROM comments 
WHERE (user_id = 1) 
OR (post_id IN (SELECT id FROM post WHERE editor_id = 1)) 

上記のクエリ「1」でサンプルとして使用され、現在のユーザーのIDと交換する必要があります。

+0

上記のエディタに複数の投稿があった場合、例外がスローされます。サブクエリの前に "in"が必要です。 "=" – TheRealTy

+0

ご迷惑をおかけしました。ただ編集してINで置き換えてください。ありがとう。 –

関連する問題