3

3 つの mysql テーブルを結合しようとしています。友達、ユーザー、コメント。

users:
id  | firstName | lastName
--------------------------
12  | edwin     | leon
9   | oscar     | smith
1   | kasandra  | rios

friends:
userId   | friendID
----------------------
   12    | 9
   9     | 12
   12    | 1
   1     | 12

comments:
commenter | comment  | commentDate
----------------------------
 12       |  hey     | Oct-2
 1        | Hmmmmmm  | Nov-1
 9        | ok       | Nov-2
 9        | testing  | Nov-2
 1        | hello    | Dec-20    
 1        | help     | Dec-20

だから、私がやろうとしているのは、ユーザーの友人のコメントをすべて選択することです。だから私が出力したいのは、あなたの友人が作ったコメントです: 例:

for edwin leon (id 12) it would output this
friendID    | comment  | commentDate | firstName | lastName
-----------------------------------------------------------
   1        | Help     |    Dec-20   | kasandra  | rios
   1        | Hello    |    Dec-20   | kasandra  | rios
   9        | testing  |    Nov-2    | oscar     | smith
   9        | ok       |    Nov-2    | oscar     | smith
   1        | Hmmmm    |    Nov-1    | kasandra  | rios

友達のコメントはすべて取得しますが、彼のコメントは取得しません。これが私のコードです:

SELECT friends.friendID, users.firstName, users.lastName, comments.comment, comments.commentDate  
FROM users
  JOIN friends ON friends.userID = users.id
  JOIN comments ON comments.commenter = friends.friendID 
 WHERE users.id = '12' AND comments.commenter != '12'

それは機能しますが、コメント投稿者の名前を取得する代わりに、それらすべてに対して edwin leon を取得します

4

3 に答える 3

3

user テーブルをユーザー ID ではなく、friendId に結合します。

SELECT friends.friendID, users.firstName, users.lastName, comments.comment, comments.commentDate  
FROM users
  JOIN friends ON friends.friendID = users.id
  JOIN comments ON comments.commenter = friends.friendID 
 WHERE friends.userID = '12' AND comments.commenter != '12'

オンラインで動作することを確認してください: sqlfiddle

于 2012-06-30T20:33:45.047 に答える
0

これを試して::

Select friendId, comment, commentdate, firstname, lastname
from
friends inner join comments on (friends.friendId=comenter)
inner join users on (users.id=friends.friendId)
where friends.userid=?
于 2012-06-30T20:34:26.963 に答える
0

これを試してください(私はテストしていません)

SELECT friends.friendID, u2.firstName, u2.lastName, comments.comment, comments.commentDate  
FROM users AS u
  JOIN friends ON friends.userID = u.id
  JOIN comments ON comments.commenter = friends.friendID 
  JOIN users AS u2 ON u2.id = friends.friendID
 WHERE u.id = '12' AND comments.commenter != '12'
于 2012-06-30T20:35:08.320 に答える