Php 比较MySQL中的表并添加yes/no响应

Php 比较MySQL中的表并添加yes/no响应,php,mysql,sql,Php,Mysql,Sql,有人能帮我调整SQL以获得所需的结果吗。我有一个用户表、一个案例表和一个案例用户关系表 用户表-用户 +----+-------+--------+ | id | first | last | +----+-------+--------+ | 1 | Joe | Bloggs | | 2 | John | Doe | | 3 | Jane | Doe | | 4 | Dave | Smith | +----+-------+--------+ 案例表-案例

有人能帮我调整SQL以获得所需的结果吗。我有一个用户表、一个案例表和一个案例用户关系表

用户表-用户

+----+-------+--------+
| id | first |  last  |
+----+-------+--------+
|  1 | Joe   | Bloggs |
|  2 | John  | Doe    |
|  3 | Jane  | Doe    |
|  4 | Dave  | Smith  |
+----+-------+--------+
案例表-案例

+----+--------+------+
| id |  Case  | Code |
+----+--------+------+
|  1 | Case 1 | C1   |
|  2 | Case 2 | C2   |
|  3 | Case 3 | C3   |
+----+--------+------+
+----+---------+---------+
| id | case_id | user_id |
+----+---------+---------+
|  1 |       1 |       1 |
|  2 |       1 |       2 |
|  3 |       2 |       4 |
|  4 |       3 |       1 |
|  5 |       1 |       4 |
+----+---------+---------+
案例用户表-案例用户

+----+--------+------+
| id |  Case  | Code |
+----+--------+------+
|  1 | Case 1 | C1   |
|  2 | Case 2 | C2   |
|  3 | Case 3 | C3   |
+----+--------+------+
+----+---------+---------+
| id | case_id | user_id |
+----+---------+---------+
|  1 |       1 |       1 |
|  2 |       1 |       2 |
|  3 |       2 |       4 |
|  4 |       3 |       1 |
|  5 |       1 |       4 |
+----+---------+---------+
我想查询数据库以返回完整的用户列表,如果用户链接到案例1,则返回是或否,然后返回案例2、案例3等

到目前为止,我得到的SQL(为案例ID 1选择)返回所有用户,但将“否”分配给所有人:

SELECT
    users.first,
    users.last,
    CASE WHEN case_users.case_id IS NULL THEN 'N' ELSE 'Y' END AS 'yes/no'
FROM
    users
        LEFT OUTER JOIN case_users ON case_users.case_id = 1
我的实际结果是:

+-------+--------+--------+
| First |  Last  | Yes/No |
+-------+--------+--------+
| Joe   | Bloggs | Y      |
| John  | Doe    | Y      |
| Jane  | Doe    | Y      |
| Dave  | Smith  | Y      |
+-------+--------+--------+
我期望的结果应该是:

+-------+--------+--------+
| First |  Last  | Yes/No |
+-------+--------+--------+
| Joe   | Bloggs | Y      |
| John  | Doe    | Y      |
| Jane  | Doe    | N      |
| Dave  | Smith  | Y      |
+-------+--------+--------+

当我无法获得所需的结果时,有人可以帮助我吗?

您缺少从用户到案例用户的连接条件:

SELECT
        users.first,
        users.last,
    CASE WHEN case_users.case_id IS NULL THEN 'N' ELSE 'Y' END AS 'yes/no'
FROM
    users
        LEFT OUTER JOIN case_users ON users.id = case_users.user_id AND case_users.case_id = 1

您缺少从用户到案例用户的联接条件:

SELECT
        users.first,
        users.last,
    CASE WHEN case_users.case_id IS NULL THEN 'N' ELSE 'Y' END AS 'yes/no'
FROM
    users
        LEFT OUTER JOIN case_users ON users.id = case_users.user_id AND case_users.case_id = 1
你可以试试这个

SELECT u.first, u.last, IF(cu.case_id,'Y','N') AS CASE_1 FROM users u
LEFT JOIN case_users cu ON u.id = cu.user_id AND cu.case_id = 1
也可以使用
IF(cu.case\u id,'Y','N')
条件代替
case

你可以试试这个

SELECT u.first, u.last, IF(cu.case_id,'Y','N') AS CASE_1 FROM users u
LEFT JOIN case_users cu ON u.id = cu.user_id AND cu.case_id = 1

可以使用
IF(cu.case\u id,'Y','N')
条件,而不是
case

尝试相反的方法,
…当case\u users.case\u id不为空时,则使用'Y'ELSE'N'…
在加入表时,通常会表示它们之间的某种关系。要获得进一步的帮助,请参阅:谢谢jarth,我尝试过,它只是将每个人都呈现为N,因此我需要重新思考逻辑,尝试相反的方式,
…当case\u users.case\u id不为NULL时,则为“Y”或“N”…
当您加入表时,通常会表示它们之间的某种关系。如需进一步帮助,请参阅:谢谢jarth,我试过了,它把每个人都变成了N,所以我需要重新思考一下逻辑,感谢Chris修复了它会记得,因为我认为案例创建了连接,但感谢你的帮助,我现在理解了逻辑感谢Chris修复了它会记得,因为我认为案例创建了连接,但感谢你的帮助,我现在明白逻辑了吗