2016-04-30 30 views
-1

從查詢需要採用相反的兩次相同的值需要從查詢對面有兩次相同的值

我試着去選擇數據庫的值!=我的ID一次,但問題是我的數據庫存儲如下

messenger_friendships 
user_one_id | user_two_id 
1    2 
2    1 
3    2 
2    3 
4    1 
4    1 

什麼,我需要的是選擇ID不是我的ID,一個時間

我試圖

Select user_one_id, user_two_id 
FROM messenger_friendships WHERE user_one_id = $myid, user_two_id = $myid 

但這是完全錯誤的。

這裏的問題是,當我把它放在一個while循環的結果將是我將不得不自己在我的friendslist兩次和其他人的兩倍藏漢

+0

你能想出一個辦法讓這個問題變得不那麼模糊嗎?我可以。 – Strawberry

+1

如果你包含了「期望的結果」,那麼即使我們無法理解你的話,我們也許會明白你的需要。如果'我的身份證= 1'你期望什麼結果? –

+0

if user_one_id =我的ID返回user_two_id。 –

回答

0
SELECT DISTINCT 
    user_one_id, user_two_id 
FROM messenger_friendships 
WHERE user_one_id = 1 

將返回

user_one_id user_two_id 
1   2 
+0

是的,它會工作,即時通訊抱歉,但我只是意識到,我的數據庫也被存儲爲user_one_id 1 user_two_id 2,然後再次複製user_one_id 1 user_two_id 2.所以數據被複制。 –

+0

請停止添加單詞!添加預期的結果到你的問題! **只有當我們看到結果時我們才能真正理解。 –

0

也許你可以嘗試通過排序和連接兩個ID來生成密鑰。

我會用一個視圖簡化查詢

CREATE OR REPLACE VIEW view_friends as 
SELECT 
user_one_id, 
user_two_id, 
IF(user_one_id < user_two_id, 
     CONCAT(user_one_id,'-', user_two_id), 
     CONCAT(user_two_id,'-', user_one_id) 
) as friend_key 

FROM messenger_friendships; 


SELECT DISTINCT f1.friend_key 
FROM view_friends as f1 
INNER JOIN view_friends as f2 
ON f1.friend_key = f2.friend_key 
AND f2.user_one_id = 1; 
1

使用CASE

Select DISTINCT 
    CASE WHEN user_one_id = $myid 
     THEN user_two_id 
     ELSE user_one_id 
    END 
FROM messenger_friendships 
WHERE $myid IN (user_one_id, user_two_id) 

或者使用UNION(可能會更快):

SELECT user_two_id as friend_id 
FROM messenger_friendships 
WHERE user_one_id = $myid 
UNION 
SELECT user_one_id as friend_id 
FROM messenger_friendships 
WHERE user_two_id = $myid; 

http://sqlfiddle.com/#!9/23faa/8

相關問題