2016-04-30 36 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

相关问题