加入的3表我有以下3個表:Users
,Friendship
& Location
SQL基於兩列
我需要寫的查詢,其中通過數據從基於用戶標識的所有3臺拉。
我覺得這裏的技巧是,你必須根據從友誼表,即用戶名和friendid兩列(所以無論是對方的朋友)來提取數據,並在此基礎上用戶的朋友列表你需要,你需要相應地拉他的朋友的名字,電子郵件和位置。
我已經寫了一些查詢使用連接,但不能得到我需要如上所述。
任何幫助將非常感激。
加入的3表我有以下3個表:Users
,Friendship
& Location
SQL基於兩列
我需要寫的查詢,其中通過數據從基於用戶標識的所有3臺拉。
我覺得這裏的技巧是,你必須根據從友誼表,即用戶名和friendid兩列(所以無論是對方的朋友)來提取數據,並在此基礎上用戶的朋友列表你需要,你需要相應地拉他的朋友的名字,電子郵件和位置。
我已經寫了一些查詢使用連接,但不能得到我需要如上所述。
任何幫助將非常感激。
select f.id as friendshipid,
f.userid,
f.friendid,
u.name,
u.email,
l.location
from (select id, userid, friendid
from friendship
union all
select id, friendid, userid
from friendship) f
left join location l
on f.friendid = l.userid
left join users u
on f.friendid = u.id
where f.userid = 2
這裏你可以看到一個小提琴測試:http://sqlfiddle.com/#!6/8eba4/13/0
我用反轉友誼表,並連接回表本身與工會線視圖,這樣的查詢看到的友誼在兩個方向,因爲它們只存儲在一個方向上。
非常感謝Brian的快速反應。 我已經走了很遠,不幸的是這不適合我。 如果我喂用戶ID = 1以上查詢工作完美。 如果我提供userid = 2,則不返回任何內容。 –
@Mubi先生我相信我已經修復了它,請參閱新的小提琴和sql。 –
@Brain再次感謝,我已經嘗試過。對於userid = 1和2,它會得到相同的結果。所以基本上第一個查詢對於userid = 1工作正常,對於userid = 2工作正常。我需要兩個工作正常的查詢。或者可能有限制,需要更改db的結構。但我想知道是否有解決方案如何將朋友列表保存在數據庫中。我不覺得有一個友誼的2條記錄是合適的。就好像用戶jim向jay發送請求並且都是朋友一樣,它應該保存在單個記錄中?有什麼想法嗎? –
如果您一次只提取一個ID,則可以在不進行子查詢的情況下執行此操作。
SELECT friendship.id FriendshipID
, @SearchedID UserID
, users.id FriendID
, users.name Name
, users.email Email
, location.location Location
FROM friendship
INNER JOIN users
ON friendship.userid = users.id
OR friendship.friendid = users.id
INNER JOIN location
ON users.id = location.userid
WHERE
users.id <> @SearchedID
AND (friendship.userid = @SearchedID OR friendship.friendid = @SearchedID);
嘿,你的問題和我的一樣嗎? :http://stackoverflow.com/questions/25015124/datatables-searching-at-server-side-php-mysql ..你有解決方案嗎? – user3209031