简单的问题,但我似乎找不到简单的解决方案:
在给定以下数据的情况下,根据当前步骤编号获取上一步和下一步唯一十六进制 ID 的最有效方法是什么:
----+-------------+----------------
身份证 | UnqID |步数 |
----+-------------+----------------
21 | 21 BcDeF| | 1 |
22 | 22 GhIjKL| | 2 |
23 | 23 MnOPq| 3 |
24 | 24 RsTuV | | 4 |
25 | 25 wXyZa | 5 |
----+-------------+----------------
例如:
假设提供的步骤是3
,我如何获得两个2
的唯一十六进制ID > 和4
?
谢谢!
<小时/>编辑
这就是我目前正在使用的,但对我来说似乎没有那么有效?
SELECT
nxt.stepnum AS NextStep,
nxt.unqID AS NextUnqID,
prv.stepnum AS PrevStep,
prv.unqID AS PrevUnqID
FROM foo w,
(
SELECT stepnum, unqID FROM foo WHERE stepnum > 3 ORDER BY stepnum LIMIT 1
) AS nxt
,
(
SELECT stepnum, unqID FROM foo WHERE stepnum < 3 AND ORDER BY stepnum DESC LIMIT 1
) AS prv
WHERE w.stepnum = 3
最佳答案
我修改了您的查询。虽然它有点嵌套,但它应该由 SQL 引擎的非常简单的索引查找组成(理论上......)
SELECT
nxt.stepnum AS NextStep,
nxt.unqID AS NextUnqID,
prv.stepnum AS PrevStep,
prv.unqID AS PrevUnqID
FROM (SELECT NULL) AS dummy -- dummy table to LEFT JOIN to
LEFT JOIN
( SELECT stepnum, unqID FROM foo
WHERE stepnum = (SELECT MIN(stepnum)
FROM foo
WHERE stepnum > 5 )
) AS nxt ON true
LEFT JOIN
( SELECT stepnum, unqID FROM foo
WHERE stepnum = (SELECT MAX(stepnum)
FROM foo
WHERE stepnum < 5 )
) AS prv ON true
关于mysql - 根据当前步骤编号获取上一步和下一步的唯一ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161875/