2016-06-20 44 views
0

我正在开发一款帮助用户输入症状并获得疾病的应用程序。如何从症状中找到疾病的最佳匹配?

我有大约症状,疾​​病和疾病症状,其两个表相关联,以下信息数据库表如下所示:

DISEASE_T SYMPTOMS disease-symptoms 
========== ========== ======== 
DISEASE_ID SYMPTOM_ID DISEASE_ID 
VALUE  VALUE  SYMPTOM_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 

任何帮助将不胜感激。

+0

这个问题有点含糊,虽然那可能就是我。您是否在为网站构建应用程序?在这种情况下,您可以使用AJAX调用连接到SQL数据库并返回结果,但我个人不会使用SQL。当谈到异步数据交换时,JSON更容易和更高效。 – Tijmen

+0

你的问题是什么?你问我们的查询?你已经尝试了什么? – llouk

+0

@llouk,上面显示的插图给出了我迄今为止所做的工作。我应该上传整个数据库 – quintumnia

回答

0

简单查询您的直接疾病症状表,根据您对排位感兴趣的症状。无论有多少实际症状符合,小组将按每种疾病给出一个记录。最后,按降序排列的ORDER会将最匹配的症状放在列表顶部。

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

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 
+0

你的解释确实很棒!非常感谢您的时间和精力 – quintumnia

+0

我创建了用户输入症状的前端表单。因此我试图在我的.php文件中实现您的代码逻辑,该文件嵌入在html表单中。请给我一个提示处理表单的代码应该如何 – quintumnia