sql 쿼리 질문이요

sql 쿼리 질문이요

QA

sql 쿼리 질문이요

답변 4

본문

안녕하세요. 로직을 수정하고 있는데요

필드가 2개가 있어요 두개는 임시로 추가한 필드에요 it_option1, it_option2로 했는데

 

아래 테이블처럼 있다고 가정하에 설명드려요

it_option1 it_option2
1. -0.5 ;999 공백
공백 2. -0.75 ;999

 

이렇게 번갈아서 있다고 치면 만약에 it_option1에 값이 없으면 it_option2 로 찾아야하는데

이게 좀 잘 안되네요.. 쿼리를 어떻게 짜야될까요? where 절에서 도무지 어떻게 할지 모르겠어요

이게 post 변수로 받아와서 두개 필드를 조회를 하고싶어요 

이 질문에 댓글 쓰기 :

답변 4


it_option1 = '${post_var}' OR it_option2 = '${post_var}'

가상테이블을 만들고 LIKE 조회를 해봤을때 단순하게 기대하는 결과가 나옵니다.
다른 추가 영향을 받는 부분이 없는지 확인이 필요한것 같습니다.


SELECT * 
FROM (
    SELECT '1. -0.5 ;999' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT '1. -0.5 ;222' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT NULL           it_option1, '2. -0.75 ;999' it_option2 FROM DUAL
) vtbl 
WHERE it_option1 LIKE '%999%' OR it_option2 LIKE '%999%'
;
/*
+--------------+---------------+
| it_option1   | it_option2    |
+--------------+---------------+
| 1. -0.5 ;999 |               |
| NULL         | 2. -0.75 ;999 |
+--------------+---------------+
2 rows in set (0.00 sec)
*/

SELECT * 
FROM (
    SELECT '1. -0.5 ;999' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT '1. -0.5 ;222' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT NULL           it_option1, '2. -0.75 ;999' it_option2 FROM DUAL
) vtbl 
WHERE it_option1 LIKE '%999%' -- OR it_option2 LIKE '%999%'
;
/*
+--------------+------------+
| it_option1   | it_option2 |
+--------------+------------+
| 1. -0.5 ;999 |            |
+--------------+------------+
1 row in set (0.00 sec)
*/

UNION ALL 은 빠르게 쿼리동작 확인을 위해 생성하는 가상 테이블, 예제일 뿐입니다.
그렇지 않고서는 테이블을 CREATE 하고 데이터를 INSERT 한후 SELECT 를 해야 합니다.

- WHERE 절 없는 결과
- OR 없는 결과
- OR 있는 결과

위주로 조건 여부에 따른 결과를 확인해보면 좋을것 같습니다.

2943472801_1689069579.8112.png

 

우선 테이블이 다르게 제공한점 양해부탁드립니다... 금방 끝날줄 알고.. 아무튼 이거는 장바구니 테이블 이거든요

해당 필드는 임시로 추가가 된 상태이고 

여기서 $_post 변수로 it_opt7 와 it_opt8 일부 필드를 검색해서 

and it_opt7 like '{$_POST['it_opt7']}%' or it_opt8 like '{$_POST['it_opt8']}%'

했다가.. 이것도 아닌것 같아서...

and (it_opt7 = '{$_POST['it_opt7']}' or it_opt8 = '{$_POST['it_opt8']}')

로 했는데도 위에 그림에 있는 값이 조회 결과가 안나와서요..

위에 사진 보면 이미 두개 필드에 값이 있는데 이거를 두 $_post 값으로 검색을 했는데 결과가 없다고만 나옵니다...

조금이라도 도움 되어으면 하고 올려봅니다. 먼저, 다 아시겠지만 OR 연산자는 두 개 이상의 조건을 결합할 때 사용하는 연산자입니다. OR 연산자를 사용하면 두 개 이상의 조건 중 하나라도 참이면 전체 조건이 참이 됩니다.

따라서, it_option1 필드와 it_option2 필드 중 하나라도 값이 있으면 조회하고 싶다면 다음과 같이 쿼리를 작성할 수 있죠.

SELECT * FROM 테이블명 WHERE it_option1 != '' OR it_option2 != '';

it_option1 필드가 공백이 아니거나(!= '') it_option2 필드가 공백이 아닌 경우(!= '') 해당 레코드를 조회합니다.

예를 들어, 아래  테이블이 있다고 가정하면...........

+------------+------------+
| it_option1 | it_option2 |
+------------+------------+
| -0.5 ;999  | -0.75 ;999 |
+------------+------------+

it_option1 필드에 값이 없는 경우(NULL 또는 공백), it_option2 필드에서 값을 조회하고 싶다면 다음과 같은 쿼리.

SELECT * FROM 테이블명 WHERE it_option1 = '' OR it_option1 IS NULL OR it_option2 != '';

위에 쿼리는 it_option1 필드가 공백('') 또는 NULL인 경우(IS NULL) 또는 it_option2 필드가 공백이 아닌 경우(!= '') 해당 레코드를 이런 식으로 조회 됩니다.

....여기서 $_post 변수로 it_opt7 와 it_opt8 일부 필드를 검색해서
and it_opt7 like '{$_POST['it_opt7']}%' or it_opt8 like '{$_POST['it_opt8']}%'
했다가..
==
이 query 문을 출력( echo)해서
이상이 없는지 확인해 보세요

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 129,102
© SIRSOFT
현재 페이지 제일 처음으로