2026, 새로운 도약을 시작합니다.

CASE WHEN ORDER BY 각각 오름 내림차순 채택완료

3년 전 조회 2,256

SELECT *,
    CASE    WHEN  vs_lv = {$vs_lv} AND vs_id={$member['mb_id']} AND vs_win = '' THEN 1
            WHEN  vs_lv = {$vs_lv} AND vs_win = '' THEN 2
            WHEN  vs_lv = {$vs_lv} THEN 3
            ELSE 4 END AS ord1
    FROM vsgababo 
    ORDER BY ord1 ASC, vs_datetime DESC LIMIT {$lim_start} , {$lim}
 

위와 코드에서 1과 2는 vs_datetime ASC 정렬 3은 vs_datetime DESC로 정렬하고 싶은데

어떻게 해야할지 아무리 이리저리 해봐도 원하는 답을 못찾았습니다.

답변 2개

Select * from ( order by 없는 기존 query) A order by ord1

아니면

SELECT *,

    CASE WHEN vs_lv = {$vs_lv} AND vs_id={$member['mb_id']} AND vs_win = '' THEN 1

            WHEN vs_lv = {$vs_lv} AND vs_win = '' THEN 2

            WHEN vs_lv = {$vs_lv} THEN 3

            ELSE 4 END AS ord1

    FROM vsgababo 

    ORDER BY

CASE WHEN vs_lv = {$vs_lv} AND vs_id={$member['mb_id']} AND vs_win = '' THEN 1

            WHEN vs_lv = {$vs_lv} AND vs_win = '' THEN 2

            WHEN vs_lv = {$vs_lv} THEN 3

            ELSE 4 END

 ASC, vs_datetime DESC LIMIT {$lim_start} , {$lim}

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

답변에 대한 댓글 2개

알려주신데로 하면 모두 내림차순으로 정렬되네요.
혹시 알려주신 Select * from ( order by 없는 기존 query) A order by ord1 를 조금더 상세히 알려주실수 없을까요. 어떤 방법인지 공부좀 해보게요
select * from (
SELECT *,
CASE WHEN vs_lv = {$vs_lv} AND vs_id={$member['mb_id']} AND vs_win = '' THEN 1
WHEN vs_lv = {$vs_lv} AND vs_win = '' THEN 2
WHEN vs_lv = {$vs_lv} THEN 3
ELSE 4 END AS ord1
FROM vsgababo
) A
ORDER BY ord1 ASC, vs_datetime DESC LIMIT {$lim_start} , {$lim}

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

일반적인 방법으로는 힘들것 같고

쿼리를 조금 변태같이 꼬아야 가능할것 같은데

그렇게 해서 완성된 쿼리가 얼마만큼 성능을 보장할지는 모르겠습니다.

정확히 무엇을 의도하시는지는 모르겠으나

다른 방법을 찾아보시는걸 추천드립니다.

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

답변에 대한 댓글 1개

네 감사합니다.
열심히 배우겠습니다.

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

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

로그인
🐛 버그신고