1

mysql データベースに 3 つのテーブルがあります。Deseasetype(DTID,TypeName) , Symptom(SID, SymptomName, DTID) , Result(RID, SID1, SID2, SID3, result). 最初の 2 つの表、十分に明確だと思います。

結果テーブル: 症状の組み合わせがあり、SymID1/SymID2/SymID3 の値は null になる可能性があります。ここで、テーブル結果の写真を送信します。

ここに画像の説明を入力

いくつかの症状を入力したいのですが、出力は「結果」テーブルからの結果になります。そのために、私はこのクエリを書きました:

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

これは、3 つの症状に値がある場合にのみ機能します。ただし、いずれかの症状が null の場合、結果は見つかりません。クエリがより完璧になる可能性があります。

**私の文章では構文エラーを避けてください。

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

マークが指摘したように、をエスケープしていない場合、クエリは最終的にnullと比較するためにフォールダウンしますnull。または、ロジックを少し変更して、値が「0」の空の症状を表示し、合体関数を使用してクエリを簡単に作成できます。

于 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 に答える