我有一张带 slider 的 table :
| id | position |
| 1 | 2 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
我想按位置
对它们进行排序,其中位置 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。
最佳答案
order by
case when position = 0 then 2 else 1 end,
position
首先强制所有零排在最后, 然后,按位置排序
关于mysql - 按 "position"排序,但最后放置 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570873/