2

私は MySQL に比較的慣れていないため、テーブルを 3 つの列でソートするのが困難です。

これは何千もの動画のデータを保存したデータベースであり、ユーザーにおすすめの動画を一覧表示するタブを Web サイトに作成したいと考えています。

可能であれば、「キー」列によって自動インクリメントされた、最近追加された最後の 100 個のビデオ (レコード) のみを並べ替えるのが最適です。

順序付けされた 100 のレコードのうち、実際にはデータベースから 5 つのレコードのみを取得し、それらを PHP 変数に格納します。

次のように列を並べ替えようとしています。

key DESC
rating_score DESC
view_count DESC

以前、動画を 2 つの列で並べ替える別の 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 に精通している人がこれを見ることができれば、あなたは命の恩人になるでしょう。

4

2 に答える 2

2

実際には、単一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- で並べ替えられ、それぞれが前の列で設定された順序を維持します。

更新(最新の 100 件の上位 5 件)
最初に元の質問を読み間違えました。最新の 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
于 2012-10-23T19:46:31.003 に答える
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
于 2012-10-23T19:52:58.677 に答える