2013-05-14 109 views
0

我無法圍繞SQL查詢包裝我的頭,試圖找出一些東西。SQL聯盟或其他表加入

只是很快,這是我的(簡單)表格: 這是在社交網站中添加好友的表示形式。 我必須使用這樣的表格格式,user1和user2都是主鍵。

  User1  |  User2 
    -------------------------------------- 
     [email protected]  | [email protected] 
     [email protected]  | [email protected] 
     [email protected]| [email protected] 
     [email protected]  | [email protected] 
     [email protected]  | [email protected] 

我需要做的是寫一個SELECT語句將返回所有的朋友[email protected]例如唯一用戶。

SELECT User2 
FROM members 
WHERE User1 = '[email protected]' 

會返回[email protected]而不是[email protected],即使我需要它返回後者。

SELECT * 
FROM members 
WHERE User1 = '[email protected]' 
OR User2 = '[email protected]' 

會返回一個錯誤,我想?可能會選擇多列。

所以我想要一個聯合加入或其他聯接是必要的(聯合所以沒有重複?),但我真的不知道如何去做。

我試圖在PHP中實現這一點,所以即使我寫的最後一個查詢工作,我不知道如何回聲User1或User2取決於它返回/我需要哪一個,如果這是有道理的。

+0

您對2列進行檢查的SQL應該沒問題(根據數據可能不是唯一的朋友除外)。雖然可能你可以將它分成2個查詢,每列一個,聯合在一起,但出於性能方面的原因(爲了能夠使用索引) – Kickstart 2013-05-14 09:05:20

回答

0

這一切都取決於你如何定義在兩個用戶之間的關係。

例如,您有一個表格條目,其中User1 ='[email protected]'和User2='[email protected]'。這是什麼意思?這是否意味着用戶foo與mumu成爲朋友?這與'友誼'的方向有關嗎?

如果答案是否定的,你只是想獲取所有行任一用戶是foo,然後將查詢

SELECT * 
FROM members 
WHERE User1 = '[email protected]' 
OR User2 = '[email protected]' 

是正確的。

但是,要獲取數據,您需要瀏覽兩列以獲取結果。

1

使用一個alias名稱列

SELECT User2 AS friend 
FROM members 
WHERE User1 = '[email protected]' 
UNION 
SELECT User1 AS friend 
FROM members 
WHERE User2 = '[email protected]' 

現在你可以呼應friend

HTH

+0

@JoachimIsaksson,是的,我編輯後收集。 – 2013-05-14 09:15:23