我正在开发一个小应用程序,在询问症状后,疾病,php + mysql
我有一系列症状,我想得到与阵列症状相匹配的疾病
$a= array('fever','pain');
$sql=mysql_query("select * from disease where `d_symptoms` like '$a'");
已尝试使用加入和
echo $v=join(',',$a);
$sql=mysql_query("select * from disease where `d_id` in ($v)");
请帮帮我
答案 0 :(得分:1)
您需要有一个名为症状的新表,其中包括当前表中疾病ID(d_id)的外键和症状名称(d_symptom)。然后每行将具有症状的名称和与之相关的疾病的ID。这样,症状字段中就不会有多个值。然后,您将其称为选择id ='d_id'的所有症状,以获取与该疾病相关的症状列表。
查询可能是
$a= array('fever','pain');
$sql=mysql_query("SELECT d_name FROM disease, symptoms WHERE disease.d_id = symptoms.d_id AND d_symptom IN ($a)";);
或者什么..
答案 1 :(得分:1)
正确的答案是正确normalize您的数据库。您不应使用逗号分隔值(如注释中所示)。我相信你可以找到许多教导规范化的文章,所以我不会在这里详细介绍。
你需要将症状与疾病分开。
疾病表
id | d_name
---------------------
1 | Dengu
2 | Typhoid
3 | Cervical
Symtoms表
id | s_name
---------------------
1 | Fever
2 | Pain
3 | Vomit
4 | Abc
5 | Xyz
疾病 - 症状表(这是一个交集)
id | d_id | s_id
---------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
2 | 2 | 3
3 | 2 | 2
1 | 2 | 4
2 | 3 | 2
3 | 1 | 5
这样您就不会创建重复的症状并使您的数据更易于使用和呈现,例如
SELECT id, s_name FROM symptoms
将为您提供所有可用症状的列表。
SELECT diseases.id, diseases.d_name, symptoms.s_name
FROM diseases
JOIN diseases_symptoms ON d_id = diseases.id
JOIN symptoms ON symptoms.id = diseases_symptoms.s_id
WHERE diseases.id = 1;
会给你一个类似于:
的结果id | d_name | s_name
---------------------------
1 | Dengu | Fever
2 | Dengu | Pain
3 | Dengu | Vomit
答案 2 :(得分:-1)
您可以为要查找的每个症状使用一个FIND_IN_SET
:
$query = "SELECT * FROM disease WHERE 1=1 ";
foreach($a as $row)
$query += "AND FIND_IN_SET($row, d_symptoms)";
$sql=mysql_query($query);
答案 3 :(得分:-2)
嗯,你不应该在一个列中存储多个值,作为最佳实践规则。(我真的会解决这个问题。)
但是,如果你想继续你拥有它的方式,也许这样的事情会起作用:
$query = "select * from disease where d_symptoms like " . $a[0];
for($i = 1; $i < count($a); i++){
$query = $query + " AND d_symptoms like " $a[$i];
}
$sql=mysql_query($query);