2012-10-23 159 views
2

我對MySQL相對來說比較新,而且我很難嘗試按三列對錶進行排序。MySQL按照DESC順序排列三列

這是一個已經存儲數千視頻數據的數據庫,我想在我的網站上創建一個標籤,向用戶列出推薦的視頻。

如果可能的話,最好只對最近添加的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 

我上面的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)誤讀原來的問題首次周圍;如果願望是選擇頂部5個視頻了最新的100,你可以使用一個子查詢,以獲得最新的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)。 –