我有以下数据库结构,
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`)
) ;
Run Code Online (Sandbox Code Playgroud)
编辑:
对不起,我的意思是如何根据输入的症状识别疾病.例如:如果我有症状:发烧和咳嗽那么我会感冒.如果我有症状:喉咙痛和发烧,那么我会感染喉咙.输入是$symptom1,$symptom2,$symptom3,等等.
谢谢.
SELECT disease_id
FROM analyze
GROUP BY disease_id
HAVING COUNT(symptom_id) > 1
Run Code Online (Sandbox Code Playgroud)
编辑:回复编辑过的问题
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
Run Code Online (Sandbox Code Playgroud)
当然,您必须使用$symptomX各自的ID 替换.
该查询列出了至少与一种症状相匹配的疾病 - 与大多数症状相匹配的疾病位于最顶层.
如果您在symptom_id和disease_idin 上添加了唯一约束analyze,则可能会丢失DISTINCT:
SELECT disease_id, COUNT(symptom_id)
FROM analyze
WHERE symptom_id IN ($symptom1, $symptom2, $symptom3)
GROUP BY disease_id
ORDER BY COUNT(symptom_id) DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |