2016-04-26 14 views
1

ID、NAME、PRICE、およびDATEの各列で構成されるテーブルがあります。MySQL ORDER BY + LIMIT + OFFSETステートメント:ファセットをオフセットし、ORDER BYでソートする方法

テーブルにたくさんのエントリがあるため、ページャスタイルのナビゲーションを作成しようとしています。そのため、SELECTの出力全体を見るのは不快になっていました。

私は、次の要求を書いた:

SELECT id 
     , name 
     , price 
     , date 
    FROM mytable 
ORDER 
    BY name asc 
LIMIT 30 OFFSET _here's_my_offset_depending_on_the_current_position_ 

これが唯一の例のように正常に動作します。私が価格で並べ替えようとすると、MYSQLは最初にORDER BYでテーブル全体をソートしてからオフセットを作成したように見えます。

この動作を変更するにはどうすればいいですか。つまり、オフセットを作成し、結果の行を好きなだけ並べ替えるにはどうすればよいですか?あなたはサブクエリを使用する場合

+5

は、サブクエリを使用してください。 –

+1

プレゼンテーションではソートしないでソートする場合はsqlではなくプレゼンテーションでソートします。もちろん、ページャは名前順にページを表示します。結果は使用するのに幾分奇妙になります。 – thst

+1

あなたはこれをやりたい理由を説明できますか?あなたがしたいことをするならば(そしてサブクエリを使用しなければならない)、あなたの検索結果は非常に矛盾したものになります。 –

答えて

2

それはだが簡単にすることができます:

SELECT * FROM (
    SELECT id, name, price, date FROM mytable LIMIT 30 OFFSET _offset_ 
) AS page ORDER BY page.name asc 
関連する問題