CASE 또는 IF ELESSIF를 사용하는 MySQL select 문을 선택하십시오.결과를 얻는 방법을 잘 모르겠습니다.
테이블이 두 개 있어요.하나는 제조사 정보와 판매 가능한 지역을 포함하고 있습니다.다른 하나는 제품을 판매하고 있습니다.지역에 따라 제품의 시야를 제한해야 합니다.이는 마치 넷플릭스의 시스템에 어디에서나(1), 캐나다에서만(2), 미국에서만(3) 볼 수 있는 비디오가 있는 것과 같습니다.
제조사 테이블의 설정에 따라 상품을 볼 수 있는 장소를 문의하려고 합니다.
예를 들어 제조업체 테이블에는 exposure_new 및 exposure_used라는2개의 필드가 있으며, 각 필드는 1,2 또는 3의 값을 가지며 새로운 비디오 또는 사용된 비디오를 볼 수 있는 위치를 제한합니다.
비디오가 추가될 때 해당 비디오에는 'expose' 값이 할당되지 않으며, 이는 현재 제조업체의 expose_new 또는 expose_used 값에 따라 인덱스에 추가할 때 즉시 수행됩니다.
제가 얻고자 하는 것은, 상품의 상세와 그것이 신품인지 중고품인지에 근거해 볼 수 있는 장소의 계산치, 그리고 모든 신품 또는 중고품에 대해서 제조원에 할당되어 있는 규칙/값입니다.조건부로 리스트에 표시하기 위해서, 이 한 자리수가 제품 마다 필요합니다.
아래는 동작하지 않지만, 제가 무엇을 하고 있는지 알 수 있을 것입니다.CASE 스테이트먼트와 다음의 WORG IF/ELSEIF 스테이트먼트로 시험해 보았습니다.
이것을 디버거하고 나를 올바른 방향으로 인도해 주면 고맙겠다.
SELECT
t2.company_name,
t2.expose_new, // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status, //can be new or used
(SELECT
IF(status ='New',
(select expose_new from manufacturers where id = t1.seller),1
)
ELSEIF(t1.status ='Used',
(select expose_used from manufacturers where id = t1.seller),1
)
END IF
) as 'expose'
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
다음은 실제 실행 중인 것처럼 보이지만 어떤 일이 일어나도 항상 첫 번째 값이 되는 CASE 버전입니다(이 경우 1).각 WHEN 스테이트먼트에 AND를 추가해서 테스트를 할 수 있을지 모르겠지만, 에러는 발생하지 않고 잘못된 결과만 나옵니다.
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.status,
CASE status
when 'New' and t2.expose_new = 1 then 1
when 'New' and t2.expose_new = 2 then 2
when 'New' and t2.expose_new = 3 then 3
when 'Used' and t2.expose_used = 1 then 1
when 'Used' and t2.expose_used = 2 then 2
when 'Used' and t2.expose_used = 3 then 3
END as expose
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
이 쿼리를 사용해 보십시오.
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.seller,
t1.status,
CASE status
WHEN 'New' THEN t2.expose_new
WHEN 'Used' THEN t2.expose_used
ELSE NULL
END as 'expose'
FROM
`products` t1
JOIN manufacturers t2
ON
t2.id = t1.seller
WHERE
t1.seller = 4238
구문:
CASE value WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result ...]
[ELSE result]
END
대체: CASE WHEN [ condition ]THEN 결과 [WHEN [ condition]THEN 결과...]
mysql> SELECT CASE WHEN 2>3 THEN 'this is true' ELSE 'this is false' END;
+-------------------------------------------------------------+
| CASE WHEN 2>3 THEN 'this is true' ELSE 'this is false' END |
+-------------------------------------------------------------+
| this is false |
+-------------------------------------------------------------+
사용 중:
SELECT act.*,
CASE
WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NULL) THEN lises.location_id
WHEN (lises.session_date IS NULL AND ses.session_date IS NOT NULL) THEN ses.location_id
WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date>ses.session_date) THEN ses.location_id
WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date<ses.session_date) THEN lises.location_id
END AS location_id
FROM activity AS act
LEFT JOIN li_sessions AS lises ON lises.activity_id = act.id AND lises.session_date >= now()
LEFT JOIN session AS ses ON ses.activity_id = act.id AND ses.session_date >= now()
WHERE act.id
또 다른 방법은 중첩된 IF 문을 사용하는 것입니다.회사 표가 있고 이 표에 포함된 레코드 수를 세려고 합니다.샘플 쿼리는 다음과 같습니다.
SELECT IF(
count(*) > 15,
'good',
IF(
count(*) > 10,
'average',
'poor'
)
) as data_count
FROM companies
여기서 두 번째 IF 조건은 첫 번째 IF 조건이 실패했을 때 작동합니다.따라서 IF 문의 샘플 구문은 IF(Condition, THEN, ELSE)가 됩니다.도움이 됐으면 좋겠는데
언급URL : https://stackoverflow.com/questions/8600671/mysql-select-statement-with-case-or-if-elseif-not-sure-how-to-get-the-result
'programing' 카테고리의 다른 글
mysql.connector python prepared 문이 byearray에 문자열을 반환하는 이유 (0) | 2023.01.15 |
---|---|
컬렉션이 필요한 이유정렬은 Mergesort를 사용하지만 Arrays를 사용합니다.정렬은 안 되나요? (0) | 2023.01.15 |
JavaScript에서 문자열의 동일성을 확인하는 올바른 방법은 무엇입니까? (0) | 2023.01.15 |
번들러를 통해 mysql2 gem을 설치하는 중 오류 발생 (0) | 2023.01.15 |
enum.values()는 반환되는 enum의 순서입니다. (0) | 2023.01.15 |