一开始我想提到的是,我试图搜索类似的问题,但没有找到解决方案。我正在尽最大努力通过从sympthoms表中键入一些id键从数据库中选择疾病。疾病表和Sympthoms表之间的关系是多对多的,其中包含拥有FK字段(disease_id和症状_id)的连接表disease_symptoms
由于我只要求一个ID,所以效果很好:
SELECT * FROM disease JOIN disease_symptoms ON
disease.id=disease_symptoms.disease_id where
disease_symptoms.symptoms_id=14 ORDER BY
`disease`.`probability` DESC
但是,当我尝试要求提供更多ID时,事实并非如此:
SELECT * FROM disease JOIN disease_symptoms ON
disease.id=disease_symptoms.disease_id where
disease_symptoms.symptoms_id=14 AND
disease_symptoms.symptoms_id=15 ORDER BY
`disease`.`probability` DESC
(我正试图从疾病中选择流感(id = 1),这与感冒的体温升高(id 14)和咳嗽(id 15)有关。)稍后,我想制作带有感冒的复选框。返回匹配疾病。 (php / symfony)。
我在哪里犯错?
预先感谢您:)
答案 0 :(得分:2)
您的WHERE条件将永远不会返回任何数据。
disease_symptoms.symptoms_id=14 AND disease_symptoms.symptoms_id=15
symptoms_id不能同时为14和15。
请尝试以下操作。
disease_symptoms.symptoms_id IN (14, 15)
好的,从您的评论中我对您的追求有了更好的了解。试试这个,
SELECT * FROM disease d
JOIN disease_symptoms ds1 ON d.id = ds1.disease_id
JOIN disease_symptoms ds2 ON d.id = ds2.disease_id
WHERE ds1.symptoms_id = 14
AND ds2.symptoms_id = 15
通过使用别名,您可以将疾病表与diseasse_symptoms表连接两次,对于您感兴趣的每个症状一次。
答案 1 :(得分:2)
您想要同时具有症状14和15的疾病,对吗?因此,您的疾病必须在所有以症状为14的疾病列表中,和在要以症状为15的疾病列表中。
可能是:
SELECT *
FROM disease
WHERE ID in (select disease_id from disease_symptoms where symptoms_id=14)
and ID in (select disease_id from disease_symptoms where symptoms_id=15)
order by probability DESC
答案 2 :(得分:0)
Ti.Android.NotificationManager.cancelAll()
您只需要从相反的方向选择关系即可。 这将返回所有具有给定症状的疾病。