需要与具有两倍相同值的查询相反
我试图从数据库中选择一个值!=我的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循环中时,结果将是我将自己在我的朋友列表中两次而另一个人两次以及
答案 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;
答案 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;