Mysql 如果我为自动递增字段指定了任何值,如何获取下一个或上一个值?
我有一个带有自动递增字段的MySQL表,我正试图找出如何使用纯MySQL获取下一个或上一个值以及该行的其余部分。该字段为AI,但数字不一定是连续的,因为行一直被删除 字段id 8、15、17 这是我开始的: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
//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()它将返回最后一条INSERT语句的ID(在该线程中!)。“自动增量”总是向上计数,因此它不会重用已删除的行。下一个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