2012-09-26 4 views
0

데이터베이스에서 일부 레코드를 가져 오는 데 문제가 있습니다. 내 사이트에있는 많은 페이지에는 다양한 값으로 태그가 지정되어 검색/구성에 도움이됩니다. 이 값 중 하나에 체크 박스가 설정되었습니다. 백엔드에서 상자가 선택되어 있으면 값은 "1"입니다. 그것은 확인되지 않은 경우 비어 있습니다.MySQL SELECT 공백 필드

여기 내 SELECT 문입니다. 사이트 방문자가 제품을 검색 할 때 AJAX를 검색하는 데 사용됩니다.

SELECT *, 
MAX(CASE WHEN name = "is_active" THEN value END) AS is_active, 
GROUP_CONCAT(... 
... 
HAVING is_active LIKE "%'.$active.'%" 

나는 공간을 절약하기 위해 내 SELECT 성명의 일부를 생략했습니다.

내가 준 예제를 제외하고는 완전히 작동합니다. 방문자가 프런트 엔드의 활성 체크 박스를 선택하지 않으면 체크 된 것과 같거나 "1"과 같은 결과를 반환합니다. 상자를 선택하면 변경되지 않습니다. is_active이 ""와 같은 레코드를 반환 할 수없는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

데이터베이스의 필드의 기본값이 NULL 인 것처럼 들립니다. 이 있는지 확인하기 위해 HAVING 절에 두 번째 조건을 추가 할 수 있습니다

HAVING is_active LIKE "%' . $active . '%" OR is_active IS NULL 

편집

난 그냥 당신이 선택 목록에 is_active을 정의했다. MAX()을 사용하면 빈 값이 무시됩니다. 당신은이 문제를 해결하기 위해 nested- CASE을 사용할 수 있습니다 : 그 열이 NULL이 아닌 경우 모든 행을 반환합니다

is_active LIKE "%%" 

이 : 비어

SELECT *, 
MAX(
    CASE WHEN name = "is_active" THEN 
     (CASE WHEN value IS NULL THEN 0 WHEN value = '' THEN 0 ELSE value END) 
    END 
) AS is_active 
...