2012-04-08 76 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)";