Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果我为自动递增字段指定了任何值,如何获取下一个或上一个值?_Mysql - Fatal编程技术网

Mysql 如果我为自动递增字段指定了任何值,如何获取下一个或上一个值?

Mysql 如果我为自动递增字段指定了任何值,如何获取下一个或上一个值?,mysql,Mysql,我有一个带有自动递增字段的MySQL表,我正试图找出如何使用纯MySQL获取下一个或上一个值以及该行的其余部分。该字段为AI,但数字不一定是连续的,因为行一直被删除 字段id 8、15、17 这是我开始的: //to get next value in table: SELECT MIN(member_id) AS val FROM members WHERE member_id > 15 LIMIT 1 //to get previous value in table: SELECT

我有一个带有自动递增字段的MySQL表,我正试图找出如何使用纯MySQL获取下一个或上一个值以及该行的其余部分。该字段为AI,但数字不一定是连续的,因为行一直被删除

字段id 8、15、17

这是我开始的:

//to get next value in table:
SELECT MIN(member_id) AS val FROM members WHERE member_id > 15 LIMIT 1

//to get previous value in table:
SELECT MAX(member_id) AS val FROM members WHERE member_id < 15 LIMIT 1
反向查询(以获取上一个值)始终返回表(1)中的最低值:

选择最大值(成员id),成员。*
来自成员
其中成员id<15
按成员订购\u id ASC
限制1
然而,这两个查询显示了我想要什么,但我实际上并不完全确定原因:

//get next LOWEST row
SELECT MAX(member_id),members.* 
FROM members 
WHERE member_id < 15 
GROUP BY member_id    
ORDER BY member_id DESC 
LIMIT 1

//get next HIGHEST row:
SELECT MIN(member_id),members.* 
FROM members 
WHERE member_id > 15 
GROUP BY member_id    
ORDER BY member_id ASC 
LIMIT 1
//获取下一最低行
选择最大值(成员id),成员。*
来自成员
其中成员id<15
按成员分组\u id
按成员下单\u id DESC
限制1
//获取下一最高行:
选择最小值(成员id),成员。*
来自成员
其中成员id>15
按成员分组\u id
按成员订购\u id ASC
限制1
我假设GROUPBY允许我从查询中提取多行?有更好的方法吗?

//获取表中的下一个值:
//to get next value in table:
SELECT * FROM members WHERE member_id > 15 ORDER BY member_id LIMIT 1

//to get previous value in table:
SELECT * FROM members WHERE member_id < 15 ORDER BY member_id DESC LIMIT 1
从成员id>15的成员中选择*按成员id排序限制1 //要获取表中的上一个值,请执行以下操作: 从成员id<15的成员中选择*按成员id描述限制1排序
那很容易。谢谢AndreKR,但有一点需要更正:

//next value
SELECT * FROM members WHERE member_id > 15 LIMIT 1

//previous value
SELECT * FROM members WHERE member_id < 15 ORDER BY member_id DESC LIMIT 1
//下一个值
从成员id>15限制1的成员中选择*
//先前值
从成员id<15的成员中选择*按成员id描述限制1排序
MIN()
MAX()
用于为另一列中的一组相同值获取列中的最小值或最大值。例如,获得学生的最低和最高分数。您可以通过学生的Id对其进行分组,MySQL将为您提供包含这两个值的单行

正如@AndreKR在他的回答中所显示的那样
MIN()
MAX()
不影响where语句

我不完全确定你想做什么。。。你为什么只看第一排和最后15排。如果在执行插入操作后试图获取auto_increment使用的最后一个值,则可以运行此查询:

选择最后一个插入ID()LAST\u INSERT\u ID()
+1的值


希望这能有所帮助。

“我有一个带有自动递增字段的MySQL表,我正试图找出如何使用纯MySQL获取下一个或上一个值以及该行的其余部分。”这就是我正在尝试做的。15是我试图获取下一个/上一个值的行的引用ID。
//to get next value in table:
SELECT * FROM members WHERE member_id > 15 ORDER BY member_id LIMIT 1

//to get previous value in table:
SELECT * FROM members WHERE member_id < 15 ORDER BY member_id DESC LIMIT 1
//next value
SELECT * FROM members WHERE member_id > 15 LIMIT 1

//previous value
SELECT * FROM members WHERE member_id < 15 ORDER BY member_id DESC LIMIT 1