2012-04-08 3 views
1

mysql 데이터베이스에 세 개의 테이블이 있습니다. (RID, SID1, SID2, SID3, result) .1st 두 테이블, 나는 충분히 명확하다고 생각합니다.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')"; 

세 가지 증상의 가치가있는 경우에만이 작업. 증상 중 하나라도 null이면 결과가 없습니다. 5 월 쿼리가 더 완벽해야합니다.

** 제 글쓰기에서 구문 오류를 피하십시오.

+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' 

참고 :

  • 당신은 제대로 $ symptom1, $ symptom2 및 $ symptom3의 값을 탈출해야합니다.
  • 인덱스를 효율적으로 사용하지 않습니다.
+0

증상에 대한 널값이 데이터베이스에 저장되는 방법을 변경해야합니다. 따라서 '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)";