[英]MySQL - Complex query issue, multiple tables
我在確定需要創建的SQL語句時遇到了一些麻煩。
我有2張桌子
友人
===================================
friendfromid | friendtoid | request
===================================
用戶數
=================
userid | username
=================
我需要獲取是我朋友的每個用戶的用戶名和用戶名。
我的ID可以在friendfromid或friendtoid中,具體取決於是否要求用戶或用戶是否要求我。
因此,基本上需要執行的是腳本需要查看friends表,獲取我的id為friendfromid或friendtoid的所有行,然后檢查請求字段是否設置為1,獲取所有符合條件的行,然后獲取不是我的每個friendfromid或friendtoid的ID和用戶名。
例如,如果我的ID為8,而朋友的ID為9,則假設他們要求我將其ID放置在friendfromid字段中,而我的ID將放置在friendtoid字段中,這意味着腳本將使用其ID(9)和使其與用戶表中的該用戶匹配。
這會給朋友列表,其中包含朋友ID和朋友名稱:
SELECT u.userid , u.username
FROM Friends f
JOIN Users u
ON (( f.friendfromid ={the ID} AND friendtoid=u.userid)
OR ( f.friendtoid = {the ID} AND friendfromid=u.userid))
WHERE f.request = 1
輸入{the ID} =需要其好友列表的用戶ID。
應該是這樣的:
SELECT *
FROM users
JOIN friends
ON friendfromid != userid
OR friendtoid != userid
WHERE request = 1
AND userid = {the ID}
無法在1個查詢中實現。
要在friendfromid
字段中使用“我的用戶ID”獲取friendtoid
:
SELECT b.friendtoid FROM Users a, Friends b WHERE request=1 AND friendfromid = a.userid
反之為friendfromid
。
使用UNION查詢,如下所示加入朋友
SELECT username FROM user INNER JOIN friends ON (userid = friendfrom) WHERE friendto = {myid) AND request = 1
UNION
SELECT username FROM user INNER JOIN friends ON (userid = friendto) WHERE friendfrom = {myid} AND request = 1
記住,您需要在friendto和friendfrom列上建立索引以提高性能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.