选择仅限于具有第二张表的特定值的记录

时间:2018-07-06 17:12:57

标签: php mysql many-to-many

我有一个用户表。我有另一个表,名为带有用户ID的诊断,以及一个名为PHgroup的字段,该字段为每个用户提供一堆值(1到5)。我只想选择PH组中值为“ 1”的患者,并排除除1以外的其他任何值的患者。当我运行此查询时,我得到了所有值为1的用户记录,即使他们还有另一个PHgroup条目,其值为4。

$query= "SELECT *, users.id as usersid, diagnoses.PHgroup, 
diagnoses.date_dx FROM users
inner join diagnoses on diagnoses.user_id = users.id
where diagnoses.PHgroup = '1' and NOT (diagnoses.PHgroup ='2' and 
diagnoses.PHgroup ='3'and diagnoses.PHgroup ='4')";

如何在PHgroup表中仅选择值为1的用户,而不选择具有其他值的患者(即使他们也具有组1)

为了澄清:如果用户有一个值为1的条目和一个值为4的anotehr条目,则我不想选择该用户。 仅值为1的用户,没有其他值为1的条目。

2 个答案:

答案 0 :(得分:0)

您要从诊断表中查询患者不在PHgroup 2-5中的ID。

您可以使用CTE(不确定所运行的mysql版本)或嵌套查询来执行此操作。

将此作为您的where子句,仅在PHgroup = 1的情况下获取结果。

where users.id in (select user_id from diagnoses where user_id not in (select user_id 
from diagnoses where PHgroup in (2,3,4,5)))

答案 1 :(得分:0)

$query= "SELECT users.id as usersid FROM users
inner join diagnoses on diagnoses.user_id = users.id
group by users.id having max(diagnoses.PHgroup) = 1;

它不是很可扩展,但是确实解决了您想要诊断1而没有其他诊断的情况(假设数字是1-5,数字是最低的)。当然,您可以使用它通过检查min和max来找到4个,而没有其他个:

$query= "SELECT users.id as usersid FROM users
inner join diagnoses on diagnoses.user_id = users.id
group by users.id having max(diagnoses.PHgroup) = 4
and min(diagnoses.PHgroup) = 4;