2012-04-08 42 views
1

私はmysqlデータベースに3つのテーブルを持っています。 (RID、SID1、SID2、SID3、result).1st 2テーブル、私は十分だと思います。mySqlでNULL値が一致する

結果テーブルに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')"; 

3つの症状の値を持っている唯一のこの作品。症状のいずれかがNULLの場合、結果は見つかりません。クエリがより完璧でなければならないかもしれません。

**私の文章では文法上の誤りは避けてください。

+0

その出力は複数回答です。適切ではない。 @habib –

+0

結果セットから正確に何を検索したいですか?あなたはパラメータとして渡すことができる偽りの値は何ですか? – aleroot

答えて

1

これは、NULLを空の文字列と比較していて、それらが等しくないためです。あなたは代わりに、これを試みることができる:

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

ノート:

  • あなたは正しく$症状1、$症状2および$ symptom3の値をエスケープする必要があります。
  • これはインデックスを効率的に使用しません。
+0

これは、シンプトンのNULL値がデータベースにどのように格納されるかを変更する必要があります。したがって、「NULL」が格納されている場合、渡された単一の症状がnullの場合、この問合せはfalseを戻します。 – mtk

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)"; 
関連する問題