2016-06-20 79 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