【问题标题】:Select statement returning the IDs backwards选择语句向后返回 ID
【发布时间】:2020-04-26 12:59:10
【问题描述】:

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

在我已经完成的另一篇文章中,我得到了我要求的答案的一半,我对此表示感谢。 (MySQL select statement returning results in circle mode)

我试图完成另一半,但没有运气。我想要实现的是一个选择语句,它将使我与下面的示例相反。

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

提前谢谢你!

【问题讨论】:

  • 你希望返回结果的顺序有什么逻辑吗?
  • 三文鱼感谢您的关注。我有一些滚动卡片。我希望当用户向左滑动并开始检索同一查询中的最后 10 行时。下面的答案适合我的需要!再次感谢您!

标签: mysql select geometry sql-order-by


【解决方案1】:

你需要条件排序:

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

请参阅demo
结果:

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

【讨论】:

  • 非常感谢!我是一个 sql starter,我试过但不明白怎么做。
【解决方案2】:

根据您之前的问题,您似乎需要在数据库中找到 下一个上一个 项的方法。这假设

  • 你知道当前项目的id
  • id 是主键或其他唯一值
  • next 获得下一个更高的id
  • previous 获得下一个较低的id
  • 当您到达 id 值范围的任一端时,您将一无所获……没有任何下一个上一个

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

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

同样,以下是获取 previous 值的方法。

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

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

,则不返回任何行

当您只需要一个值时,条件排序方案并没有什么好处

【讨论】:

  • 不,我需要一个圆圈选择。我这样刷了一些卡,当我倾向于到达终点时,我需要它来返回一些第一条记录,反之亦然。当我倾向于到达开始时也重新运行一些最后的行。上面的Forpas回答对我有好处。感谢您的宝贵时间!
猜你喜欢
  • 2013-08-16
  • 2012-12-12
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多