2012-12-25 2 views
1

ORDER BY CASE 또는 IF BY (ORDER BY IF)로 작업 한 적이 없으며 인터넷에서 찾은 몇 가지 예가 다음 작업을 수행하는 데 도움이되는 것보다 더 혼란 스럽습니다.MySQL ORDER BY CASE/IF 관련 문제

회원 목록이 있으며이 회원 목록의 상단 (상단)으로 사용자를 주문하여 사용자의 활동에 약간의 보상을 원합니다. - 필드 각각에 의해 프로파일에 채워진 모든

user_percentage  |  user_photo  |  user_lastlogin 
    ---------------------------------------------------------- 
     12      1     1356389646 
     42      1     1456549641 
     37      0     1776389443 
     84      1     1356535535 
     56      0     1868689646 
     66      0     1811189622 
     71      1     1656779645 
  • 는 "USER_PERCENTAGE는"값 (100 공)을 원하는 분야

    내 예에서

    , 내가 3 열이 "사용자"라는 MySQL의 테이블이 사용자.

  • 사용자가 프로필 사진을 업로드 한 경우 'user_photo'는 값 (0 = 거짓, 1 = 참)을 보유합니다.
  • 는 "user_lastlogin는 마지막 방문의 값 (타임 스탬프)를 보유하고

그것은 조금 설명하는 것이 아니라 내가 원하는 간단 무슨 말을하기는 어렵습니다 :.

  • 사용자를 로모그래퍼 높은 user_percentage 값은 멤버 목록 위에 있어야하지만 user_photo가 없으면 이전 user_lastlogin 타임 스탬프가있는 경우와 마찬가지로 멤버 목록에서 "아래로 이동"한 다음 멤버에서 더 아래쪽에 나열해야합니다 주문하십시오.

  • 또한 내가 막으려 고하는 것은 사용자가 가입하고 모든 프로필 필드를 채운 다음 user_percentage 값을 100으로 설정하고 사진을 업로드 한 다음 user_photo를 1로 설정하지만 로그인하지 않은 것입니다. 더 이상 오랫동안 (그래서 그는 매우 오래된 user_lastlogin = timestamp를 가짐),이 사용자를 멤버 목록 순서대로 아래쪽으로 이동 시키길 원합니다.

내 질문은 : 어떻게 든 1 개의 MySQL ORDER BY 문으로 할 수 있습니까?

user_lastlogin이 중요도가 높고 user_percentage가 조금 더 높은 반면 user_photo의 중요도는 30 %라고 가정 해 보겠습니다.

아이디어가 있으십니까?

감사합니다.

답변

0

SQL 작성을 시작하려면 각 매개 변수의 가치를 분명히해야합니다.

모든 사람들 - 즉, 각각의 계산이

(photo*timesincelogin*20)+(percentage)

또는 CASE 기초한 :

당신은 같은 간단한 계산 중 하나로 변환 다음 예제의 목록을 생산한다 사진 그러면 외출을하지 않는 모든 사람들이 time*percentage에 의해 분류됩니다.

손으로 물결 모양으로 움직이는 '조금 아래로 움직입니다.'는 SQL 명령으로 대답하기에 충분하지 않습니다.

+0

물론 '아래로 움직이기'는 사용자가 100 user_percentage + user_photo = 1이지만 매우 오래된 user_lastlogin 날짜 인 경우를위한 것이 었습니다. 그런 다음이 오래된 _lastlogin 날짜로 인해 사용자 아래에 표시되어야합니다 최신 _lastlogin 날짜가 있습니다. –

+0

하지만 얼마나 새로운가요? 1 년이면 충분합니까? 1 개월? 1 일? 1 초? –

+0

예, 로그인하지 않은 상태에서 1 년 (user_lastlogin) 후에 간단한 것으로합시다. 또한 user_photo가 없으면 목록의 끝에 나열되어야합니다. –