我正试图为我的用户返回一个朋友列表,并试图收集与其用户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”。我把这张桌子做得很简单。在我的版本中,有很多列我希望我的服务器避免返回。
假设客户机用户id是4,那么我需要选择user1u id/user2u id等于4的所有行并返回另一个人的用户状态。在表中,值等于4的第一种情况是在user1u id中,我需要该行返回user2u id和user2u状态。
这是我目前所掌握的,但并不管用:
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'
")

如何编写此查询语句?

最佳答案

如果您引用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'

是的,笨重而混乱。如果你用联合就简单多了。
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

关于mysql - 根据值在一行中选择不同的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38341992/

10-09 22:29
查看更多