我正在尝试为我的用户返回朋友列表,而我正在尝试收集与其user_id匹配的值。
| ID | user1_id | user1_status | user2_id | user2_status |
| 1 | 1 | 0 | 2 | 0 |
| 2 | 4 | 1 | 5 | 1 |
| 3 | 4 | 1 | 6 | 0 |
| 4 | 1 | 0 | 4 | 1 |
这是我遇到的问题,我要查找的值可以是“user1_id”/“user2_id”,然后我需要为其他用户返回“user_status”。 ñ。我让这张桌子非常简单。在我的版本中,我希望我的服务器有更多列,以避免返回。
假设客户端user_id为4,所以我需要选择user1_id / user2_id等于4的所有行,并返回另一个人user_status。在表中,第一个值等于4的情况是在user1_id中,我需要该行来返回user2_id和user2_status。
这是我到目前为止所做的,但它不起作用:
mysqli($connect, "
SELECT `id`
CASE
WHEN `user1_id`='4' THEN `user2_id` AND `user2_status`
WHEN `user2_id`='4' THEN `user1_id` AND `user1_status`
ELSE NULL
END
from 'relationship'
where `user1_id`='4' OR `user2_id`='4'
")
如何编写此查询语句?
答案 0 :(得分:1)
如果您参考CASE syntax,您会看到它被定义为返回单个列而不是元组。此外,在您的查询中,您尝试获取(user2_id,user_status)或NULL。在这里,你得到的列数不匹配,也是不允许的。
如果你真的想使用CASE,你可以这样做:
SELECT `id`
CASE
WHEN `user1_id`='4' THEN `user2_id`,
ELSE NULL
END
CASE
WHEN `user2_id`='4' THEN `user1_id`
ELSE NULL
END
CASE
WHEN `user1_id`='4' THEN `user1_status`
ELSE NULL
END
CASE
WHEN `user2_id`='4' THEN `user2_status`
ELSE NULL
END
FROM 'relationship'
where `user1_id`='4' OR `user2_id`='4'
是的,笨拙而令人困惑。如果你使用UNION会更简单。
SELECT id, user2_id AS uid, user2_status as ustatus FROM relationship WHERE user1_id = 4
UNION
SELECT id, user1_id AS uid, user1_status as ustatus FROM relationship WHERE user2_id = 4