我有一张带滑块的桌子:
| 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
选择它们,但显然,将 0 排序在 1 之上,给我:
| 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。