簡體   English   中英

MySQL-復雜查詢問題,多個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM