我见过这个问题: Select query but show the result from record number 3
表
|id| foo | bar |
-------------------------
|1 | aaa | 123 |
|2 | bbb | 234 |
|3 | ccc | 345 |
|4 | ddd | 456 |
根据上面的链接我使用查询
SELECT *
FROM Table
ORDER BY (id = 3) DESC
,结果是
|id| foo | bar |
-------------------------
|3 | ccc | 345 |
|1 | aaa | 123 |
|2 | bbb | 234 |
|4 | ddd | 456 |
所以我的问题是,有没有办法显示结果从记录编号3开始,然后是4,然后是1,最后一个是记录编号2? 所以结果可以显示如下:
|id| foo | bar |
-------------------------
|3 | ccc | 345 |
|4 | ddd | 456 |
|1 | aaa | 123 |
|2 | bbb | 234 |
我上面的例子只是一个模型,我的目标是如何从我选择的记录中将结果排序到最大记录然后循环到第一条记录。如果我选择3号记录,则结果为
3,4,5,...,max,1,2
有可能吗?
答案 0 :(得分:1)
我认为这样可行:
ORDER BY (id = 3) OR (id = 4) DESC, id ASC
ETA:根据你的评论,你真正想要的是1& 2显示最后。这看起来像这样:
ORDER BY id <= 2, id
答案 1 :(得分:1)
要强制执行特定订单,您需要使用CASE
:
ORDER BY CASE WHEN id = 3 THEN 1
WHEN id = 4 THEN 2
WHEN id = 1 then 3
WHEN id = 2 then 4
ELSE 5 END ASC
答案 2 :(得分:0)
这可能不是很理想,因为它需要两个查询,但它是完全指定的,不依赖于使用布尔值进行排序:
(SELECT *
FROM Table
WHERE id >= 3
ORDER BY id ASC)
UNION
(SELECT *
FROM Table
WHERE id < 3
ORDER BY id ASC)