Select语句向后返回ID

时间:2020-04-26 12:59:10

标签: mysql select geometry sql-order-by

我有一张插入了一些主要ID的表。

在另外一个帖子中,我已经完成了我所要求的一半答案,对此我感到非常感谢。 (MySQL select statement returning results in circle mode

我试图没有运气来完成另一半。我要实现的是一条select语句,它将使我与以下示例相反。

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (id SERIAL PRIMARY KEY);

INSERT INTO my_table VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);

为我提供的选择语句:

SELECT * FROM my_table ORDER BY id > 5 DESC, id;

返回6-7-8-9-1-2-3-4-5


我还需要一条select语句来返回:

5-4-3-2-1-9-8-7-6

提前谢谢!

2 个答案:

答案 0 :(得分:0)

您需要条件排序:

SELECT * FROM my_table 
ORDER BY id < 6 DESC, id DESC;

请参见demo
结果:

| id  |
| --- |
| 5   |
| 4   |
| 3   |
| 2   |
| 1   |
| 9   |
| 8   |
| 7   |
| 6   |

答案 1 :(得分:0)

从您先前的问题来看,您似乎需要找到在数据库中找到下一个上一个项目的方法。假设

  • 您知道当前项目的id
  • id是主键或其他唯一值
  • 下一个获得下一个更高的id
  • 上一个获得下一个较低的id
  • 当您到达ID值范围的任一端时,您什么也得不到……没有下一个上一个

这是获取下一个 ID的方法。

 SELECT id FROM tbl WHERE id > [[[current_id]]] ORDER BY id LIMIT 1

同样,这是获取上一个值的方法。

 SELECT id FROM tbl WHERE id < [[[current_id]]] ORDER BY ID desc LIMIT 1

这些查询仅返回一行,如果没有下一个上一个

,则不返回任何行

当您只需要一个值时,从条件排序方案中获得的好处就不多了

相关问题