2017-04-08 51 views
0

我在寻找一个SELECT查询,我可以找出两个用户的状态,状态可以是多个事情,但让我们保持简单并检查两个用户是否是朋友。如何检查用户x和用户x的状态?

使用此查询我可以选择每个有x状态的用户,现在x表示没有状态。但是这样做,我得到的用户表返回,我想返回是true或false。此外,此查询返回每个具有x状态的用户x。我想根据以下情况返回true或false:如果用户x和x有状态,在这种情况下为朋友。我希望我在这里不要模糊。

SELECT 
    u.* 
FROM User u 
LEFT JOIN User_Status us 
    ON u.id = User_ID1 
    AND us.User_ID2 = 4 
WHERE us.status IS NULL 

用户表:

ID-----first_name-----last_name-----etc...<br>** 
-2--------James----------someting-------...<br> 
-4----------Jack-----------someting-------...<br> 
-5--------Sabrina---------someting-------...<br> 

User_status表:

User_ID1-----User_ID2-----Status<br>** 
-----------4-----------------2-----friends<br> 
-----------2-----------------4-----friends<br> 
-----------4-----------------5-----something else<br> 
-----------5-----------------4-----something else<br> 

通缉的结果:

ID 2 (James) & ID 4 (Jack) 
isFriend 
true 

ID 2 (James) & ID 5 (Sabrina)<br> 
isFriend 
false (They don't even have a status together.) 
+0

在您期望的结果中,您具有相同的ID但结果不同... – Mihai

+0

哎呀!固定... –

回答

1

事实上,你的问题是有点含糊。根据我的理解,你想知道两个用户(已知的ID)是不是朋友?

下面的查询应该可以帮到你。

SELECT 
    "A_USER_ID" as user_a, 
    "B_USER_ID" as user_b, 
    (
     CASE 
     WHEN EXISTS(
     SELECT * 
     FROM User_Status us 
     WHERE us.status = "friends" AND ((
      us.User_ID1 = "A_USER_ID" AND us.User_ID2 = "B_USER_ID" 
     ) OR (
      us.User_ID1 = "B_USER_ID" AND us.User_ID2 = "A_USER_ID" 
     )) 
    ) 
     THEN "true" 
     ELSE "false" 
     END 
    ) as friends 
FROM 
    User u 
WHERE 
    u.id = "A_USER_ID"; 
+0

你的解释确实好得多,这就是我正在寻找的。如何在7个不同的地方传递ID似乎有点奇怪,是否没有办法只输入2个ID的1次? –

+0

还有一个小问题,如果2个I​​D之间的状态存在但不是==朋友。它仍然是真实的。如果2个身份证一起没有身份,我只会说假。@mateus –

+0

哦,我的不好。我刚刚更新了修复该问题的代码。 – Mateus