我有一个MySQL表:从MySQL数据库中选择朋友,然后选择他们的详细资料(也许用连接)
Friends
--------
fr_id
user_id_a
user_id_b
approval_status
---------
其背后的基本逻辑是,如果用户#1发送好友请求,好友# 2表条目将如下所示:
------------------------------------------------
fr_id - user_id_a - user_id_b - approval_status
1 1 2 no
------------------------------------------------
现在只有当用户批准请求时,他们才会成为朋友。
要选择给用户#1的所有请求,我可以使用此查询:
SELECT * FROM friendship
WHERE
approved_status='no'
AND
(user_id_a = 1 OR user_id_b = 1)
结果将是这样的:
fr_id - user_id_a - user_id_b - approval_status
1 1 2 no
如何,如果当前用户是一个与user_id_a
区分或user_id_b
,所以我可以使用其他ID从另一个表中提取他们的信息?
与@aweis
SELECT * ,
CASE WHEN user_id_a =3
THEN 'a'
ELSE 'b'
END AS UserIdColumn,
CASE WHEN user_id_a =3
THEN user_id_b
ELSE user_id_a
END AS NotCurrentUserID
FROM fr_friendship
WHERE approved_status = 'yes'
AND (
user_id_a =3
OR user_id_b =3
)
提供我可以选择朋友,但离开即时通讯有问题的部分谢胜利的答案是与另一个表再加入得到的朋友的用户名... 我试过,但它给我的错误..
#1054 - Unknown column 'NotCurrentUserID' in 'on clause'
SELECT f.*, p.username AS friend,
CASE WHEN user_id_a = 1 THEN 'a'
ELSE 'b'
END AS UserIdColumn,
CASE WHEN f.user_id_a = 1 THEN f.user_id_b
ELSE f.user_id_a
END AS NotCurrentUserID
FROM fr_friendship AS f
LEFT JOIN u_profile AS p ON p.user_id_login = NotCurrentUserID
WHERE
f.approved_status = 'yes'
AND
(f.user_id_a = 1 OR f.user_id_b = 1)
编辑:解
我设法解决这个问题.... 我希望它帮助某人:
SELECT a.friend_id, u.username
FROM
(SELECT CASE WHEN user_id_a = 1
THEN user_id_b
ELSE user_id_a
END AS friend_id
FROM fr_friendship
WHERE approved_status = 'yes' AND (user_id_a = 1 OR user_id_b = 1)
) AS a
LEFT JOIN u_profile AS u ON u.user_id_login = a.friend_id
谁是创始人,谁是互惠者 - 还是不是那样工作? – Strawberry 2013-04-25 23:22:18
thx回复@Strawberry实际上它不会那样工作。但逻辑上它的user_id_a是发起者..但是那与我的问题没有关系。 – Anmar 2013-04-25 23:30:59