테스트 사이트 - 개발 중인 베타 버전입니다

sql 쿼리 질문이요 채택완료

아이팟 2년 전 조회 1,926

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

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

 

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

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

 

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

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

지름신2
2년 전

(it_option1 = '{$val}' OR it_option2 = '{$val}')

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

2년 전

 

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

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

여기서 $_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 값으로 검색을 했는데 결과가 없다고만 나옵니다...

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

배르만
2년 전
php 변수가 해석된 실제 쿼리값을 출력해서 확인해보는 방법이 도움이 될지 모르겠습니다.
아이팟
2년 전
아.. 힘드시단말이군요~ 알겠습니다..
피라미드
2년 전
조금이라도 도움 되어으면 하고 올려봅니다. 먼저, 다 아시겠지만 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 필드가 공백이 아닌 경우(!= '') 해당 레코드를 이런 식으로 조회 됩니다.
엑스엠엘
2년 전
....여기서 $_post 변수로 it_opt7 와 it_opt8 일부 필드를 검색해서
and it_opt7 like '{$_POST['it_opt7']}%' or it_opt8 like '{$_POST['it_opt8']}%'
했다가..
==
이 query 문을 출력( echo)해서
이상이 없는지 확인해 보세요

댓글을 작성하려면 로그인이 필요합니다.

2년 전

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

2년 전

</p>

<p>it_option1 = '${post_var}' OR it_option2 = '${post_var}'</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

아이팟
2년 전
음.. 우선 두서 없이 질문 드려 죄송합니다~ 급해서.. 단서를 이렇게 남겼는데요
저도 or 절로 해서 구분해서 했다가 제대로 조회를 하는데 원하는 결과가 안나와서요
배르만
2년 전
가상테이블을 만들고 LIKE 조회를 해봤을때 단순하게 기대하는 결과가 나옵니다.
다른 추가 영향을 받는 부분이 없는지 확인이 필요한것 같습니다.
[code]
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)
*/
[/code]
아이팟
2년 전
아.. 근데 이게 값이 like 로 해도 결과가 없다고 나와요 이미 해당 테이블에 값이 있거든요
배르만
2년 전
UNION ALL 은 빠르게 쿼리동작 확인을 위해 생성하는 가상 테이블, 예제일 뿐입니다.
그렇지 않고서는 테이블을 CREATE 하고 데이터를 INSERT 한후 SELECT 를 해야 합니다.

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

위주로 조건 여부에 따른 결과를 확인해보면 좋을것 같습니다.
아이팟
2년 전
아래 사진 첨부 했습니다.. 필드가 좀 다르더라도 양해해주세요.. ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인