My frontend app can list of my items order by createdAt (for sure by calling API):
SELECT * FROM items ORDER BY createdAt
Output is for example:
id: myIdAAA id: myIdEEE id: myIdPPP id: myIdRRR
Id of each item is UUID (there in example just myId*).
I can open detail of item by url /item/detail/myIdPPP and on this detail I have GO TO NEXT item.
The problem is, that I don`t know how to create SQL query to select next item like this:
SELECT * FROM items AFTER myIdEEE ORDER BY createdAt
Should return myIdPPP.
SELECT * FROM items AFTER myIdPPP ORDER BY createdAt
Should return myIdRRR.
It is possible and how?
Advertisement
Answer
If I understand correctly, you can use:
SELECT i.* FROM items i WHERE i.createdAt > (SELECT i2.createdAt FROM items i2 WHERE i2.id = ?) ORDER BY i.createdAt DESC LIMIT 1;
The ? is a parameter placeholder for the item of interest. This returns the next time timewise in the table — assuming there are no duplicates.
Note: If you really want a unique value for getting the “next” item, then use an auto-incremented column. This is guaranteed to be unique, even if you insert multiple items at the same time.