미채택 완료

CASE WHEN ORDER BY 각각 오름 내림차순

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개 / 댓글 3개

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개

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

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