首页 > 解决方案 > 如何通过createdAt获取mysql顺序中的下一项

问题描述

我的前端应用程序可以列出我的项目订单createdAt(肯定是通过调用 API):

SELECT * FROM items ORDER BY createdAt

输出例如:

id: myIdAAA
id: myIdEEE
id: myIdPPP
id: myIdRRR

每个项目的 ID 是 UUID(在示例中只是myId*)。

我可以通过 url 打开项目的详细信息,/item/detail/myIdPPP并且在此详细信息上我有GO TO NEXT项目。

问题是,我不知道如何创建 SQL 查询来选择下一个项目,如下所示:

SELECT * FROM items AFTER myIdEEE ORDER BY createdAt

应该返回myIdPPP

SELECT * FROM items AFTER myIdPPP ORDER BY createdAt

应该返回myIdRRR

这是可能的,如何?

标签: mysqlsqlsql-order-by

解决方案


如果我理解正确,您可以使用:

SELECT i.*
FROM items i
WHERE i.createdAt > (SELECT i2.createdAt FROM items i2 WHERE i2.id = ?)
ORDER BY i.createdAt DESC
LIMIT 1;

?是感兴趣项目的参数占位符。这会在表中按时间返回下一次——假设没有重复。

注意:如果您真的想要一个唯一值来获取“下一个”项目,请使用自动递增列。这保证是唯一的,即使您同时插入多个项目。


推荐阅读