スライダー付きのテーブルがあります。
| id | position |
| 1 | 2 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
そして、それらを、で並べ替えたいと思いますposition
。ここで、0の位置はソートされていないかのように扱われます。ソートされていないレコードは、他の列(created_at
)でソートする必要があります。例として、二次ソートとしてのIDによる順序付けは問題ありません。
シンプルな
SELECT "sliders".* FROM "sliders" ORDER BY position ASC, id ASC
それらを選択しますが、明らかに、1の上に0を並べ替えて、次のようにします。
| id | position |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
| 1 | 2 |
しかし、次を返すクエリが必要です。
| id | position |
| 4 | 1 |
| 1 | 2 |
| 2 | 0 |
| 3 | 0 |
ソートされたアイテムの下に「ソートされていない」アイテムをソートします。
これはSQLで可能ですか?もしそうなら、どのように?これはまったく良いアプローチですか、それとも「is_sorted」フラグを含む別の列などを使用したほうがよいでしょうか。
私はActiveRecord(Ruby on Rails)をORMとして使用しているので、これを簡単にするヘルパーを提供しているのでしょうか?
編集:SQLは現在sqlite用ですが、MySQLに移植可能である必要があります。