我有以下数据库结构,
CREATE TABLE IF NOT EXISTS `analyze` (
`disease_id` int(11) NOT NULL,
`symptom_id` int(11) NOT NULL
) ;
CREATE TABLE IF NOT EXISTS `disease` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE IF NOT EXISTS `symptom` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(4) NOT NULL,
PRIMARY KEY (`id`)
) ;
修改
对不起,我的意思是如何根据输入的症状识别疾病。
例:
如果我有症状:发烧和咳嗽,那么我会感冒。
如果我有症状:喉咙痛和发烧,那么我会感染喉咙。
输入为$symptom1
,$symptom2
,$symptom3
,依此类推。
谢谢。
答案 0 :(得分:8)
SELECT disease_id
FROM analyze
GROUP BY disease_id
HAVING COUNT(symptom_id) > 1
编辑:回复已修改的问题
SELECT disease_id, COUNT(DISTINCT symptom_id)
FROM analyze
WHERE symptom_id IN ($symptom1, $symptom2, $symptom3)
GROUP BY disease_id
ORDER BY COUNT(DISTINCT symptom_id) DESC
当然,您必须使用各自的ID替换$symptomX
。
此查询列出了与至少一种症状相匹配的疾病 - 与最多症状相匹配的疾病最重要。
如果您在symptom
的{{1}} _ id和disease_id
添加了唯一约束,则可能会丢失analyze
:
DISTINCT
答案 1 :(得分:0)
select d.id from disease d inner join analyze a
on d.id = a.disease_id
group by d.id having count(a.disease_id) > 1
答案 2 :(得分:0)
select disease_id, count(*)
from analyze
where symptom_id in ($symptom1, $symptom2, $symptom3)
group by disease_id
order by 2 descending;
将按照匹配症状的降序返回匹配的疾病ID。