1

我在 mysql 数据库中有三个表。Deseasetype(DTID,TypeName) , Symptom(SID, SymptomName, DTID) , Result(RID, SID1, SID2, SID3, result).1st 两个表,我觉得够清楚了。

在结果表中:将有符号的组合,并且 SymID1/ SymID2/ SymID3 的任何值都可以为空。在这里,我发送了表格结果的图片。

在此处输入图像描述

我想输入一些症状,输出将是“结果”表的结果。为此我写了这个查询:

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

这仅在三个症状具有价值时才有效。但如果任何症状为空,则找不到结果。可能是查询应该更完善。

**请避免在我的写作中出现任何语法错误。

4

3 回答 3

1

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

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

笔记:

  • 您需要正确转义 $symptom1、$symptom2 和 $symptom3 的值。
  • 这不会有效地使用索引。
于 2012-04-08T18:29:55.277 回答
0

As mark pointed out, the query is eventually falling down to compare with null if you are not escaping the null. Or you can slightly change your logic to show a empty symptom with value '0' and then using the coalesce function you can easily build your query.

于 2012-04-08T18:38:18.457 回答
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)";
于 2012-04-08T18:46:26.953 回答