게시물 작성 입력필드에 점수 입력칸이 있고, 목록 페이지에 점수 검색창을 만들었습니다.
점수 검색창에서는 A 점수 부터 B 점수 까지 범위를 설정해서 검색할 수 있도록 했는데요,
검색창에서 0 ~ 50점을 검색했을 때, 점수 입력필드가 작성이 되지 않은 게시물은 검색이 되지 않습니다.
입력필드가 비어있으면 wp_kboard_board_option 테이블에 아예 행이 추가가 되지 않는 것과 관련이 있는지,
쿼리에 ' 점수 iS NULL AND 점수 <= 50점 ' 형태로 추가도 불가능한 것 같은데.. 방법이 있을까요?
검색창에서 1월 점수를 0 ~ 100점, 2월 점수를 0 ~ 50점으로 선택하고 검색 쿼리를 출력해보면 이런 구조 인듯합니다.
SELECT `wp_kboard_board_content`.`uid`
FROM `wp_kboard_board_content`
INNER JOIN `wp_kboard_board_option` AS `option_1월점수`
ON `wp_kboard_board_content`.`uid` = `option_1월점수`.`content_uid`
INNER JOIN `wp_kboard_board_option` AS `option_2월점수`
ON `wp_kboard_board_content`.`uid` = `option_2월점수`.`content_uid`
WHERE `wp_kboard_board_content`.`board_id` = '8'
AND `wp_kboard_board_content`.`parent_uid` = '0'
AND `wp_kboard_board_content`.`notice` = ''
AND (`wp_kboard_board_content`.`status` IS NULL OR `wp_kboard_board_content`.`status` = '' OR
`wp_kboard_board_content`.`status` = 'pending_approval')
AND ((`option_1월점수`.`option_key` = '1월점수' AND
`option_1월점수`.`option_value` <= 100) AND
(`option_2월점수`.`option_key` = '2월점수' AND
`option_2월점수`.`option_value` <= 50))
ORDER BY `wp_kboard_board_content`.`date` DESC
'1월점수', '2월점수' 입력필드에 입력을 하지 않은 게시물과, 각 설정 점수 이하인 게시물을 같이 가져오려면 어떻게 해야할까요?
안녕하세요~^^
존재하는 meta_key의 value가 NULL인 데이터를 검색하는 것과
애초에 meta_key가 존재하지 않는 것은 쿼리가 다릅니다.
존재하지 않는 데이터를 필터링 할 때는 차집합을 사용합니다.
전체 테이블 - 값이 있는 테이블을 할 때 값이 없는 데이터가 표시됩니다.
이때 나머지 부차적인 조건들도 같이 맞아야 해서 코드만 보고 딱 나오기가 어렵습니다.
아래 링크에서 차집합의 예제를 확인하실 수 있습니다.
사실 차집합보다 0인 데이터를 집어넣고 필터링 하는 편이 더 간편하기 때문에
문제가 되지 않는다면 기본값을 0으로 지정해두시는 것도 하나의 방법이 될 수 있을 듯 합니다.
고맙습니다.
답변 감사드립니다.
입력필드에 0을 입력하고 저장해도 메타키가 생성되지 않는 것 같습니다.
입력필드 설정에서도 기본값을 0으로 지정했습니다.
이외에 기본값을 0으로 지정하는 방법이 따로 있을까요?