免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3415 | 回复: 19
打印 上一主题 下一主题

MYSQL中怎么得到自增字段的相临值? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-15 11:18 |只看该作者 |倒序浏览
假设我有一个名为ID的自增字段,我取到一个值N,我想得到N前面与后面的ID值最好用什么办法?

不能用简单的N-1与N+1,因为存在删除操作,所以ID不一定是连续的。

论坛徽章:
1
2015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:17
2 [报告]
发表于 2006-12-15 11:59 |只看该作者
不懂,帮你顶!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
3 [报告]
发表于 2006-12-15 15:38 |只看该作者
select id from table where id>(or <) someid limit 1;

论坛徽章:
0
4 [报告]
发表于 2006-12-15 17:58 |只看该作者
谢楼上两位,我已经解决了~~

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
5 [报告]
发表于 2006-12-15 18:14 |只看该作者
说说你的方法

论坛徽章:
0
6 [报告]
发表于 2006-12-19 11:01 |只看该作者
原帖由 xinglp 于 2006-12-15 18:14 发表
说说你的方法


先说说目的吧:要做一个类似文章显示的东西,显示当前文章时要有上一篇下一篇的连接,所以有此需求。

我现在做的是直接先去查询当前ID+1和ID-1的数据。如果为空的话再进一步判断:

在查询ID-1的时候,如果为空,先判断是不是小于1了,是的话返回空,如果不是则调用函数自身,继续查询ID-1。

查询ID+1的时候类似,先直接查询ID+1,返回结果为空的话在判断是否大于当前最大的ID,如果不是则递归。

这样,在绝大多数情况下都只需要最少的查询。

论坛徽章:
0
7 [报告]
发表于 2006-12-19 13:36 |只看该作者
就这个问题还要用到递归?
不就两个查询搞定

SELECT id AS preid FROM somewhere WHERE id < someid ORDER BY id DESC LIMIT 1;
SELECT * FROM somewhere WHERE id >= preid ORDER BY id ASC LIMIT 3;

至于判断首尾,那是程序的事,别把数据库当上帝

[ 本帖最后由 Namelessxp 于 2006-12-19 13:39 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-12-19 14:02 |只看该作者
原帖由 Namelessxp 于 2006-12-19 13:36 发表
就这个问题还要用到递归?
不就两个查询搞定

SELECT id AS preid FROM somewhere WHERE id < someid ORDER BY id DESC LIMIT 1;
SELECT * FROM somewhere WHERE id >= preid ORDER BY id ASC LIMIT 3; ...


是你在把数据库当上帝了,我的方法在绝大多数情况下只用一次查询的。而你的呢?在所有情况下都要两次查询。还要判断首尾,我的只在第一次查询为空的情况下才会发生后面的情况,而这样的情况是很少发生的。你是高手,但是眼高手低,SORRY~~

你根本没看清楚情况。

论坛徽章:
0
9 [报告]
发表于 2006-12-19 14:07 |只看该作者
对了,我需要补充的一点。

我的数据库哲学是,数据库只是一个存放数据的地方,运算工作应尽量交由程序处理。

这就是为什么在做无限分类时,有的人喜欢用递归需要N次查询,而有的人则只是在表里面加了几个字段只需要一次查询。

所以你说的什么“别把数据库当上帝”请不要针对我。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
10 [报告]
发表于 2006-12-19 15:52 |只看该作者
原帖由 笨狼追风 于 2006-12-19 14:07 发表
对了,我需要补充的一点。
我的数据库哲学是,数据库只是一个存放数据的地方,运算工作应尽量交由程序处理。
这就是为什么在做无限分类时,有的人喜欢用递归需要N次查询,而有的人则只是在表里面加了几个字 ...


多数情况下需要的不是简单相邻的id,而是在限制条件下的相邻值,就拿这个论坛的相邻贴跳转来说吧,看看链接地址就知道了,

不要一味的否定别人

[ 本帖最后由 xinglp 于 2006-12-19 16:01 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP