0

Expertz 请帮助 :(

我有一个关系表

r_id    usera   userb   active
13       5         1      0
16       1         2      0

现在我想检查其他用户是否是 id 为 1 的朋友,并给我除 1 之外的其他 id

就像这个查询一样,我希望 ans 为空,因为不满足条件 active=1

如果条件返回真而不是我预期的结果为 5,2

所以我形成了这个查询

注意:user_id 会根据会话不断变化

$user_id = 1
SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE `usera`=$user_id 
    OR `userb`=$user_id and `active`='1'

现在的问题是即使不满足条件(即 active=1)它仍然给我 userb 我希望查询返回为空或 null

谢谢,

4

2 回答 2

0

您缺少一些括号:

SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE `usera`=$user_id 
    OR (`userb`=$user_id and `active`='1')

甚至这可能是您正在寻找的:

SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE (`usera`=$user_id OR `userb`=$user_id) 
  and `active`='1'
于 2012-09-12T17:22:18.663 回答
0

你的括号是错误的:

$user_id = 1
SELECT CASE 
        WHEN `usera`=$user_id 
        THEN `userb` 
        ELSE `usera` END  
FROM  `relationship`  
WHERE (`usera`=$user_id  OR `userb`=$user_id) and `active`='1'

您似乎只关心活跃用户,但您只将条件放在条件表达式的第二部分。

于 2012-09-12T17:27:50.600 回答