2016-09-03 9 views
1

私が取得したい ユーザー{ID、名前、電子メール} 関係{ID、UID、RELID、タイプ}SQL - 条件のために選択されたデータやテーブルを結合する

のようなユーザーとの関係、のためのSQLテーブルを持っていますJOINなどを使用して、すべての "フレンド" ID、名前、電子メール(現在のユーザーIDによる)

参加を使用する場合は、ユーザーのテーブルに参加して関係を選択するか、関係を選択してユーザーに参加する方がよいでしょうか?

(私は今発明し、私はエラーのために残念ビットdiferrent表やコード、使用)のようなもの

1:

SELECT DISTINCT u.ID, u.name, u.email FROM users u JOIN relationships r ON (r.uid = 1 OR r.relid = 1) AND r.type = 1 WHERE u.ID = r.uid OR u.ID = r.relid 

2:

SELECT DISTINCT u.ID, u.name, u.email FROM relationships r JOIN users u ON r.uid = u.ID OR r.relid = u.ID = 1 WHERE r.uid = u.ID OR r.related = u.ID 

を編集: IDがr.uidまたはr.relatedのユーザーを選択するとDISTINCTが使用されるため、私もg現在のユーザー(uid +関連)をすべてのリレーションに対して返します。 DISTINCTはユーザーを一意にする必要がありますか?私は初心者であり、これをstackoverflowで見つけました。

したがって、ユーザーから選択したり、リレーションシップに参加したり、リレーションシップを選択したり、ユーザーに参加したりする方が良いですか?ところで

:私は非常にあなたができる労働組合UNION

答えて

1

との答えのようなユーザーがuidにしてrelidであるユーザー。

SELECT users.* 
FROM users 
INNER JOIN relationships AS rel 
ON users.ID = rel.uid 
WHERE users.ID = 500 

UNION 

SELECT users.* 
FROM users 
INNER JOIN relationships AS rel 
ON users.ID = rel.relid 
WHERE users.ID = 500 
0

ないのはなぜあなたがDISTINCTを使用しているが、あなただけの関係表からすべての行(友人)を選択し、[ユーザーテーブルからその詳細を参加したいように見えることを確認。

SELECT u.id, u.name, u.email 
FROM relationships r 
LEFT JOIN users u ON u.id = r.uid 
WHERE r.uid = 12345 
関連する問題