我正在寻找一个获得用户朋友的案例。有一个系统,其中is_confirmed = 1表示朋友,is_confirmed = 0表示仍处于未决状态,但发送请求。我需要得到所有is_confirmed = 1的朋友。如果没有朋友或者如果大小写为0并且有待处理的请求,则查询返回NULL。它返回多个NULLS。
SELECT CASE WHEN friend_user_id = '935'
AND is_confirmed = '1'
THEN initiator_user_id
WHEN initiator_user_id = '935'
AND is_confirmed = '1'
THEN friend_user_id
ELSE NULL
END AS friend_id
FROM wp_bp_friends
LIMIT 0 , 30
也是使用CASE最好的方法吗?
SQL FIDDLE here
答案 0 :(得分:1)
我认为CASE不是最好的方法。另一种方式可以是:
(
/* 1) */
SELECT wp_bp_friends.initiator_user_id AS FriendId
FROM wp_bp_friends
WHERE
wp_bp_friends.friend_user_id = 935
AND wp_bp_friends.is_confirmed = '1'
)
UNION
(
/* 2) */
SELECT wp_bp_friends.friend_user_id AS FriendId
FROM wp_bp_friends
WHERE
wp_bp_friends.initiator_user_id = 935
AND wp_bp_friends.is_confirmed = '1'
)
它将连接左侧的Id 1)确认的935名朋友是发起人 2)用户935作为发起人的已确认的935朋友
答案 1 :(得分:0)
使用两个查询:
SELECT friend_user_id FROM wp_bp_friends
WHERE initiator_user_id='935' AND is_confirmed='1'
SELECT initiator_user_id FROM wp_bp_friends
WHERE friend_user_id='935' AND is_confirmed='1'
或者将它们组合成一个:
(
SELECT friend_user_id FROM wp_bp_friends
WHERE initiator_user_id='935' AND is_confirmed='1'
) UNION ALL (
SELECT initiator_user_id FROM wp_bp_friends
WHERE friend_user_id='935' AND is_confirmed='1'
)