5

テーブルからfriendIDをクエリするのに助けが必要です。私のテーブルには、一緒に友達である2人のメンバーのユーザーIDが格納されています。

しかし、2人のメンバーとの「友情」を保存するには、次のような2つのレコードを保存する必要があります。

friendshipID |  userID  |  friendID  
1            |  5       |  10
2            |  10      |   5

それでも、最初のレコードを保存するだけで十分な場合は、両方のメンバーの両方のIDが含まれているため、DBにとっては重いように思われます。

しかし、ID=5の友達のレコードを照会したいときに問題が発生します。IDがuserID列にある場合と、friendID列にある場合があります。

これは私が使用しているクエリです:

SELECT *
FROM friends
WHERE userID = '5'
   OR friendID = '5'

でもやりたいのはこんな感じ

SELECT 
if $userID=5 then userID as myfriend
else friendID=5 then friendID as myfriend
FROM friends WHERE userID='5' OR myfriendID='5'

それが理にかなっていることを願っています。最後に、メンバー#5のすべての友達IDを取得し、#5を友達またはユーザーとして結果を表示するのではなく、彼の友達だけを表示したいと思います。

4

1 に答える 1

4

このクエリは、このSQL Fiddleの例に示すように、#5の友達のID値と名前を返します。

SELECT f.FriendId AS FriendId
   , u.Name AS FriendName
FROM FriendTable AS f
INNER JOIN UserAccount AS u ON f.FriendId = u.UserId
WHERE f.UserId = 5

UNION

SELECT f.UserId AS FriendId
   , u.Name AS FriendName
FROM FriendTable AS f
INNER JOIN UserAccount AS u ON f.UserId = u.UserId
WHERE f.FriendId = 5

UNION重複を削除し、このクエリが友人の1つのレコード、またはコメントで言及した2つのレコードの友情の両方で機能するようにします。ただし、2番目のレコードには、1つのレコードだけでは取得できない新しい情報が格納されていないため、2つのレコードの友情は必要ありません。

于 2012-10-20T02:11:15.417 に答える