2012-10-23 3 views
2

나는 비교적 MySQL에 익숙하지 않으며 세 개의 열로 테이블을 정렬하는 데 어려움을 겪고 있습니다.DESC에서 세 개의 열로 정렬하는 MySQL

수천 개의 비디오 데이터가 저장된 데이터베이스이며 사용자에게 권장 비디오를 나열하는 웹 사이트 탭을 만들고 싶습니다.

가능하면 '키'열로 자동 증가 된 최근에 추가 한 최근 100 개의 비디오 (레코드) 만 정렬하는 것이 좋습니다.

100 개의 정렬 된 레코드 중에서 데이터베이스에서 5 개의 레코드 만 가져 와서 PHP 변수에 저장합니다.

다음과 같이 열을 정렬하려고합니다.

key DESC 
rating_score DESC 
view_count DESC 

나는 이전에 작동하는 두 개의 열에서 비디오를 정렬 다른 MySQL의 문을 사용했다.

SELECT `title`, `duration`, `rating_score`, `imageurl`, `player_url` FROM (SELECT * FROM `archived_videos` ORDER BY `key` DESC LIMIT 0,210) AS ttbl ORDER BY `rating_score` DESC 

3 열로 정렬 된 위의 MySQL 구문의 현재 및 수정 된 버전은 다음과 같습니다.

SELECT `title`, `duration`, `rating_score`, `imageurl`, `player_url` FROM ((SELECT * FROM `archived_videos` ORDER BY `key` DESC LIMIT 0,100) AS ttbl (SELECT * FROM `archived_videos` ORDER BY `view_count` DESC) AS ttbl) ORDER BY `rating_score` DESC LIMIT 0,5 

MySQL을 유창하게 사용하는 사람이이 기능을 사용할 수 있다면 생명의 은인이 될 수 있습니다.

+3

이를 댓글은 주로 응답을 생각하는 사람들을위한 것입니다. 질문은 약간 오도하는 것 같습니다. 원하는 결과는 100 개의 최신 항목 중에서 5 개의 가장 높은 등급의 항목이 (나는 생각합니다). 단지'key' 열로 정렬하면 원하는 결과를 얻지 못할 것입니다. –

+0

@ G-Nugget +1 ... 설명해 주셔서 감사합니다. –

답변

1

당신은 실제로 일종의 하나의 SELECT 문에서 여러 열에서 하위 쿼리를 사용할 필요가 없습니다 수 있습니다

SELECT 
    title, duration, rating_score, imageurl, player_url 
FROM 
    archived_videos 
ORDER BY 
    key DESC, 
    rating_score DESC, 
    view_count DESC 
LIMIT 5 

결과는/열은 당신이 그들을 목록을 순서대로 정렬됩니다. 먼저 key 열을 기준으로 정렬 한 다음 rating_score으로 정렬 한 다음 view_count - 이전에 미리 정렬 한 순서대로 정렬합니다.

UPDATE
I의 (상위 5 최신 100의) 원래의 질문을 주위에 처음 잘못 읽을; 욕망 최신 100 만점에 5 비디오를 맨 위로 선택하는 경우, 당신은 최신 (100)를 얻을 수있는 하나의 하위 쿼리를 사용하고 외부 쿼리는 상위 5 얻을 :

SELECT 
    title, duration, rating_score, imageurl, player_url 
FROM (
    SELECT 
     title, duration, rating_score, imageurl, player_url 
    FROM 
     archived_videos 
    ORDER BY 
     key DESC 
    LIMIT 100 
    ) AS top_100 
ORDER BY 
    rating_score DESC, 
    view_count DESC 
LIMIT 5 
+0

원래 질문에 대한 내 의견보기 –

+0

시간과 노력을 보내 주셔서 감사합니다. 정말 고맙습니다. – user1769348

2
SELECT `title`, `duration`, `rating_score`, `imageurl`, `player_url` 
FROM (
    SELECT * 
    FROM `archived_videos` 
    ORDER BY `key` DESC 
    LIMIT 100 
) AS sub 
ORDER BY `rating_score` DESC, `view_count` DESC 
LIMIT 5 
+0

이것은 정말 잘 작동했습니다. 고마워요! – user1769348

+0

@ user1769348 도움이 되니 기쁩니다! 이 질문에 대한 답변이 있으면 [수락 된 답변으로 표시하십시오] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

관련 문제