2012-04-08 38 views
1

我在mysql数据库中有三个表。 Deseasetype(DTID,TypeName),症状(SID,症状名称,DTID),结果(RID,SID1,SID2,SID3,结果).1第二个表格,我觉得很清楚。mySql中的空值匹配

结果表中:将会有symtoms的组合,SymID1/SymID2/SymID3的任何值都可以为null。这里我发送表格结果的图片。

enter image description here

我要输入一些症状,输出将是从“结果”表中的结果。 对于我写此查询:

$query = "select Result from result where (result .SID1= '$symptom1') AND (result.SID2= '$symptom2') AND (result.SID3 = '$symptom3')"; 

这项工作只有当三个症状的才有价值。但如果任何症状都为空,则未找到结果。可能是查询应该更完美。

**请在写作时避免任何语法错误。

+0

输出的多个答案。并不合适。 @habib – 2012-04-08 18:31:30

+0

你想从结果集中完全检索什么?什么是可以作为参数传递的可能值? – aleroot 2012-04-08 18:38:00

回答

1

这是因为您将NULL与空字符串进行比较,并且它们不相等。你可以代替试试这个:

SELECT Result 
FROM symptom 
WHERE IFNULL(symptom.SID1, '') = '$symptom1' 
AND IFNULL(symptom.SID2, '') = '$symptom2' 
AND IFNULL(symptom.SID3, '') = '$symptom3' 

注:

  • 您需要正确逃生的symptom1 $,$ symptom2和$ symptom3值。
  • 这不会有效地使用索引。
+0

这将需要更改数据库中存储症状的空值的方式。因此,如果存储'NULL',那么如果传递的单个症状为空,则此查询将返回false。 – mtk 2012-04-08 18:42:45

0

正如标记所指出的那样,如果您不是逃避null,查询最终会降低以与null进行比较。 或者您可以稍微更改逻辑以显示值为'0'的空白症状,然后使用coalesce函数可以轻松构建查询。

0

这是行不通的吗?

$query = "select Result from result 
         where (result.SID1 = '$symptom1' OR result.SID1 IS NULL) AND 
           (result.SID2 = '$symptom2' OR result.SID2 IS NULL) AND 
           (result.SID3 = '$symptom3' OR result.SID3 IS NULL)";