情况:
目前我有 3 个问题:
- First - 通过id获取排序位置的数据;
- 其次 - 通过position-1获取数据;
- 第三 - 按位置+1 获取数据。
我只想有 1 个查询,如果它们存在,则可以通过 id + 上一个和下一个查询获取“需要的一个”。
查询:
首先
set @position = 0;
SELECT
`position` FROM
(
SELECT `id`, @position:=@position+1 as `position` FROM {#table}
"other_part_of_query"
ORDER BY `modified_time` DESC
) t
WHERE
t.id = '".id."'
LIMIT 1
第二个和第三个
set @position = 0;
SELECT
`id` FROM
(
SELECT `id`, @position:=@position+1 as `position` FROM {#table}
"other_part_of_query"
ORDER BY `modified_time` DESC
) t
WHERE
t.`position` = '".position."'
LIMIT 1
最佳答案
这很复杂,因为您是通过 id
选择一行,但通过另一个字段 modified_time
选择相邻的行。
想法是使用变量来枚举行。并且,使用另一行来计算您关心的 id
的值。在子查询中执行此操作,然后选择所需的行:
SELECT t.*
FROM (SELECT `id`,
@rn := if(@rnid := if(t.id = '".id."', @rn + 1, @rnid),
@rn + 1, @rn + 1
) as rn
FROM {#table} t
"other_part_of_query" cross join
(select @rn := 0, @rnid := 0) vars
ORDER BY `modified_time` DESC
) t
WHERE rn in (@rnid - 1, @rnid, @rn)
关于mysql - 选择一行及其下一行和上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966667/