正在开发一款可帮助用户输入症状并患上疾病的应用程序。
我有以下数据库表,其中包含有关症状、疾病和疾病症状的信息,并将这两个表关联起来,如下所示:
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
任何帮助将不胜感激。
最佳答案
根据您感兴趣的症状对直接疾病症状表进行简单查询。无论有多少实际症状符合条件,分组都会为每种疾病提供一个记录。最后,按降序排序会将最匹配的症状放在列表的顶部。
现在,简单地加入您的症状和疾病即可获取最终读取上下文输出的“值”描述符。
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
关于mysql - 如何从症状中找到疾病的最佳匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37926652/