MySQL下一个/上一个记录

Sim*_*mon 6 mysql

这样做的最佳解决方案是什么:

我有一个查询(例如SELECT * FROM products WHERE category = 12 ORDER BY price DESC),用户点击了此查询返回的产品之一.

因此,在此示例中,查询返回产品1,3,7,4,10,6,8,9和15.用户单击产品10.现在我想要产品6和产品4的"下一个"和"上一个"链接.

我如何获得这两个ID?

Mar*_*ers 8

首先,您应该注意到您的订购没有明确定义.

如果两个对象具有相同的价格,则这两个项的相对顺序是不确定的,并且可能从查询更改为查询.所以你的订单需要有一个打破平局,以保证订单一致.如果您有一个id字段,可以将其用作打破平局:

ORDER BY price DESC, id
Run Code Online (Sandbox Code Playgroud)

下一步实施:

SELECT *
FROM products
WHERE category = 12
AND price = (SELECT price FROM products WHERE id = 10) AND id > 10
OR price > (SELECT price FROM products WHERE id = 10)
ORDER BY price DESC, id
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

以前是相似的,但条件和顺序相反:

SELECT *
FROM products
WHERE category = 12
AND price = (SELECT price FROM products WHERE id = 10) AND id < 10
OR price < (SELECT price FROM products WHERE id = 10)
ORDER BY price, id DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)