programing

CASE 또는 IF ELESSIF를 사용하는 MySQL select 문을 선택하십시오.결과를 얻는 방법을 잘 모르겠습니다.

yoursource 2023. 1. 15. 13:13
반응형

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

반응형