gpt4 book ai didi

mysql - 查找给定 PK 的位置以及下一行和上一行作为一个结果行

转载 作者:行者123 更新时间:2023-11-29 14:36:04 25 4
gpt4 key购买 nike

有问题的表(条纹不需要的列):

car_id INT(11) PK
url VARCHAR(100)
signup TIMESTAMP

默认列表查询如下所示:

SELECT car_id, url FROM car ORDER By signup DESC

现在我需要在结果集中找到汽车的位置,就像在列表查询中一样。以及上一行和下一行的 url。

我尝试了很多不同的方法,但最终不确定是否可行。 (在一个查询中)。

任何有关查询的帮助或指向正确方向的指针将不胜感激。

编辑:

期望的结果是:

pos, nextid, nexturl, previd, prevurl

最佳答案

试试这个 -

+行位置

SELECT car_id, url, signup, CONCAT(pos1, '/', @p1) position FROM (
SELECT
c.*,
@p1:=@p1+1 pos1,
@p2:=IF(car_id = 3 AND @p2 IS NULL, @p1, @p2)
FROM
cars c,
(SELECT @p1:=0, @p2:=NULL) t
ORDER BY
signup
) t
WHERE
pos1 BETWEEN @p2 - 1 AND @p2 + 1
<小时/>

你写道:期望的结果是:pos, nextid, nexturl, previd, prevurl

尝试这个查询:

SELECT
@p2 pos,
MAX(IF(pos1 > @p2, car_id, NULL)) nextid,
MAX(IF(pos1 > @p2, url, NULL)) nexturl,
MAX(IF(pos1 < @p2, car_id, NULL)) previd,
MAX(IF(pos1 < @p2, url, NULL)) prevurl
FROM (
SELECT
c.*,
@p1:=@p1+1 pos1,
@p2:=IF(car_id = 3 AND @p2 IS NULL, @p1, @p2)
FROM
cars c,
(SELECT @p1:=0, @p2:=NULL) t
ORDER BY
signup
) t
WHERE
pos1 BETWEEN @p2 - 1 AND @p2 + 1

关于mysql - 查找给定 PK 的位置以及下一行和上一行作为一个结果行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9015870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com