2017-03-09 88 views
0

我正在與Android的健康應用程序,它將顯示人體部位,如頭部,胸部等工作。現在我有三個表,如症狀,疾病和症狀_disease表將鏈接這兩個表。如果用戶選擇頭暈,暈厥,虛弱等症狀,則會顯示高血壓病。但是當用戶選擇只有一種症狀時會出現問題,比如說頭暈,它也會顯示相同的疾病。我如何區分這些東西?以及如何實施它。症狀及其疾病數據庫設計

這是我的症狀表

s_id | s_name | s_part 
1  |dizziness | Head 
2  |syncope | Head 
3  |asthenia | Head 

疾病表

d_id | d_name    | d_desc 
1  |hypertensive disease| .... 

Symptom_disease表

s_id | d_id 
1 | 1 
2 | 1 
3 | 1 

我使用此查詢來獲取疾病

SELECT d.d_name, d.d_desc, s.symp_name 
FROM symtoms s 
    LEFT JOIN symptom_disease sd ON sd.sid = s.sid 
    LEFT JOIN diseases d ON d.did = sd.did 
WHERE s.sid IN (1,2,3) GROUP BY d.d_name 

這裏的問題是,當用戶只選擇一個病,我不希望它顯示疾病,因爲一個症狀並不表明用戶是生病了。所以,我需要一個關於如何實現這個的建議。我看到了一個解決方案,它要求我在症狀表中添加排名/權重。但我不知道如何實現這個方法。提前致謝。

+1

你有問題需要輸出嗎? – LONG

+0

也許在疾病表中添加一列以指示選擇該疾病之前所需的最少症狀數。 –

+0

或者可以在symptom_disease表中添加一列以指定症狀與該疾病相關的概率。並在疾病表中添加一列以指示選擇該疾病之前的最小概率。 –

回答

0

這可能不是這樣做的最優雅的方式,但它應該工作,假設你使用MySQL:

select * 
from 
(
    select d.d_name, d.d_desc, GROUP_CONCAT(sd.s_id SEPARATOR ',') s_ids 
    from Diseases d , Symptom_disease sd 
    where sd.d_id = d.d_id 
    group by d.d_name, d.d_desc 
    order by sd.s_id 
) as t 
where t.s_ids = '1,2,3' 
; 

您需要確保您連接升序排列所有sympton在IDS外部選擇的where子句(其中t.s_ids ='1,2,3'),它應該只給出您的症狀與您的用戶選擇的症狀完全匹配的疾病。

+0

非常感謝。我會試試 –

0

下面是使用類似概率列的東西來確定特定疾病的可能性的基本方法。

對於疾病表:

1 Flu 
2 Lyme 

對於症狀表:

1 Muscle Aches 
2 Headache 
3 Fatigue 
4 Fever 
5 Vomiting 
6 Tick Bite 

對於disease_symptom表:

s_id d_id probability 
1  1  0.2 
2  1  0.2 
3  1  0.2 
4  1  0.2 
5  1  0.2 
1  2  0.1 
2  2  0.1 
3  2  0.1 
4  2  0.1 
6  2  0.6 

因此,如果病人說,有症狀2,4,和5,然後

select d_name, sum(probability) 
from disease, disease_symptom 
where disease.d_id = disease_symptom.d_id 
and s_id in (2, 4, 5) 
group by d_name 
order by sum(probability) desc 

Flu 0.6 
Lyme 0.2 

所以流感是最有可能的。

但是,如果患者的症狀2,圖4和6,然後

select d_name, sum(probability) 
from disease, disease_symptom 
where disease.d_id = disease_symptom.d_id 
and s_id in (2, 4, 6) 
group by d_name 
order by sum(probability) desc 

Lyme 0.8 
Flue 0.4 

所以萊姆病是最有可能。

+0

嘿。感謝您的長時間解釋。現在就試試這個 –

+0

一個簡單的問題。你如何確定每種疾病的可能性? –