需要与具有两倍相同值的查询相反

时间:2016-04-30 08:17:49

标签: mysql

需要与具有两倍相同值的查询相反

我试图从数据库中选择一个值!=我的id一次,但问题是我的数据库存储如下

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

我需要的是选择一次不是我的身份证的身份

我试过

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

但那完全错了。

这里的问题是,当我把它放在while循环中时,结果将是我将自己在我的朋友列表中两次而另一个人两次以及

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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  

答案 2 :(得分: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;