mysql中where子句中的数组

时间:2016-03-12 06:45:43

标签: php mysql arrays

我正在开发一个小应用程序,在询问症状后,疾病,php + mysql

我的桌子是 enter image description here

我有一系列症状,我想得到与阵列症状相匹配的疾病

$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)");

请帮帮我

4 个答案:

答案 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);