我工作在一个应用程序,帮助用户输入症状和获得疾病。
我有以下数据库表,其中包含有关症状、疾病和疾病症状的信息,这两个表关联在一起,如下所示:
DISEASE_T SYMPTOMS disease-symptoms
========== ========== ========
DISEASE_ID SYMPTOM_ID DISEASE_ID
VALUE VALUE SYMPTOM_ID
我想搜索用户选择的症状,这是疾病症状表中的症状id数组,并返回前5个匹配的疾病id,其中大多数症状与每种疾病匹配。
例如,用户选择的症状是1、2、3(咳嗽、伤风、头痛)
DISEASE_T SYMPTOMS_T disease-symptoms
========= ========== ===============
1,malaria 1,cough 1,1
2,tuberculosis 2,cold 1,2
3,typhoid 3,headache 2,2
2,3
3,1
3,2
3,3
任何帮助都将不胜感激。
发布于 2016-06-21 01:31:50
根据您感兴趣的符合条件的症状,对直接疾病症状表进行简单查询。group by将为每个疾病提供一个记录,无论有多少实际症状合格。最后,按降序排序将把最匹配的症状放在列表的顶部。
现在,简单地连接到您的症状和疾病,以获得最终读取上下文输出的“值”描述符。
select
DS.Disease_ID,
D.Value as Disease,
group_concat( S.Value SEPARATOR ',' ) as Symptoms,
count(*) as SymptomsMatching
from
Disease-Symptoms DS
JOIN Symptoms_T S
on DS.Symptom_ID = S.Symptom_ID
JOIN Disease_T D
on DS.Disease_ID = D.Disease_ID
where
DS.Symptom_ID IN ( 1, 2, 3 )
group by
DS.Disease_ID
order by
count(*) desc,
D.Value
https://stackoverflow.com/questions/37926652
复制相似问题