如何从症状中找到疾病的最佳匹配?

时间:2016-06-20 15:46:14

标签: mysql

正致力于帮助用户输入症状并患病的应用程序。

我有以下数据库表,其中包含与两个表关联的症状,疾病和疾病症状的信息,如下所示:

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

根据您有资格获得的症状,简单查询您的直接疾病症状表。无论有多少实际症状符合条件,该小组将根据疾病给出一个记录。最后,ORDER by DESCENDING命令会将最匹配的症状放在列表的顶部。

现在,简单地加入你的症状和疾病,以获得"价值"最终读取上下文输出的描述符。

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