我正在使用android健康应用程序,它将显示人体部位,如头部,胸部等。现在我有三个表,如症状,疾病和symptom_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
这里的问题是当用户只选择一种疾病时,我不希望它显示疾病,因为一种症状并未显示用户生病。所以,我需要一个关于如何实现这一点的建议。我看到一个解决方案,要求我在symptom_disease表中添加等级/权重。但我不知道如何实现这个方法。提前谢谢。
答案 0 :(得分:1)
这是使用概率列等方法确定特定疾病可能性的基本方法。
对于疾病表:
1 Flu
2 Lyme
对于症状表:
1 Muscle Aches
2 Headache
3 Fatigue
4 Fever
5 Vomiting
6 Tick Bite
对于疾病症状表:
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
所以莱姆病最有可能发生。
答案 1 :(得分: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'
;
你需要确保在外部select的where子句中以升序连接所有sympton id(其中t.s_ids ='1,2,3'),它应该只给你的症状的疾病与您的用户选择的完全匹配。