免费注册 查看新帖 |

Chinaunix

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

问一个类似QQ号码分配的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-08 08:55 |只看该作者 |倒序浏览
一个用户注册的程序
每注册一个新用户就分配一个从10000开始,自动+1的号码,保存在数据库里
数据库中要预留几个号码,例如:666666、777777等等....,这些号码由另外一个程序(非PHP)人工分配给用户
在某种情况下要删除个别用户信息,包括分配给他的号码
这样的话,数据库里号码这个字段的值就不是依次+1递增的
新用户注册时,就不能按最大号码+1的原则分配号码
要求被删除的号码在有新用户注册时也被重新分配
谁能帮我想一个简单一点的算法
谢谢~!

论坛徽章:
0
2 [报告]
发表于 2006-03-08 09:05 |只看该作者
原帖由 宝贝的小猪 于 2006-3-8 08:55 发表
一个用户注册的程序
每注册一个新用户就分配一个从10000开始,自动+1的号码,保存在数据库里
数据库中要预留几个号码,例如:666666、777777等等....,这些号码由另外一个程序(非PHP)人工分配给用户
在某种情 ...


从10000开始,这个似乎建表时就可以设定;

要求被删除的号码在有新用户注册时也被重新分配——这个可以在注册前搜索一下是否有标记为删除状态(并非真的删除)的纪录,如果有,就update,如果没有就insert

预留几个号码应该简单吧?插入纪录后,检查这个纪录号,如果是666666之类,标记为删除状态,然后重新插。

[ 本帖最后由 qingmedia 于 2006-3-8 09:10 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-03-08 09:33 |只看该作者
比如现在数据库里数据是这样的:
10000
10001
....
10005
10080
10088
其中10080和10088是由其他非PHP程序填写的
新用户注册时,10005到10080 和 10080到10088之间的数据要怎么知道还没有被分配?
现在做的是用另外一张表保存了保留和被删除的号码,注册时先从这张表里检查有没有等分配的
但是一旦有手工写入的时候,就会在用户信息表里出现有多个“空白”的地方,号码就浪费了.....

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2006-03-08 15:42 |只看该作者
你做两个表啊。

表一保存正常数据
表一保存删除数据

如果从表2取数放到了1,那么就从2删除。

论坛徽章:
0
5 [报告]
发表于 2006-03-08 23:08 |只看该作者
表一,ID自增字段,从1000开始,每次加一

表二,保留ID

每次插入数据,表一的ID自动获取,再查看一下,表一的ID在不在表二里面,在的话,再插一次,

论坛徽章:
0
6 [报告]
发表于 2006-03-09 07:18 |只看该作者
原帖由 HonestQiao 于 2006-3-8 15:42 发表
你做两个表啊。

表一保存正常数据
表一保存删除数据

如果从表2取数放到了1,那么就从2删除。

现在就是这样做的,好像会引起上面说的"空白"...

论坛徽章:
0
7 [报告]
发表于 2006-03-09 07:22 |只看该作者
原帖由 ipaddr 于 2006-3-8 23:08 发表
表一,ID自增字段,从1000开始,每次加一

表二,保留ID

每次插入数据,表一的ID自动获取,再查看一下,表一的ID在不在表二里面,在的话,再插一次,

关键问题就在表一里的数据有可能现在是10000,下一个就是10050(由其他程序写进来的),这样的话,表一里假设数据是10000,10001,100050,100080 , 那下次用户注册会从10002开始吗?还是在加入100050时,把10001-100049都写进表二?

论坛徽章:
0
8 [报告]
发表于 2006-03-09 13:56 |只看该作者
原帖由 宝贝的小猪 于 2006-3-9 07:22 发表

关键问题就在表一里的数据有可能现在是10000,下一个就是10050(由其他程序写进来的)...


你这数据id的建立没有一个规矩怎么成?大家都抢注一个id你怎么办?

最简单的就是利用自增字段,利用数据库“独家”分配id。至于id预留,可设定另外的规则来处理,我上面的方案可供选择。

论坛徽章:
0
9 [报告]
发表于 2006-03-11 07:38 |只看该作者
原帖由 qingmedia 于 2006-3-9 13:56 发表


你这数据id的建立没有一个规矩怎么成?大家都抢注一个id你怎么办?

最简单的就是利用自增字段,利用数据库“独家”分配id。至于id预留,可设定另外的规则来处理,我上面的方案可供选择。

那就要在手工分配时,检索全部空白了
我再想想

论坛徽章:
0
10 [报告]
发表于 2006-03-15 21:53 |只看该作者
表一:
id        uid
1         10000
2         10001
.          .
(id自动增加,uid用程序++)
表二:
存特别的uid号码

66666
88888
if(想插入的uid在表二里有则跳过)

表三相当于配置文件)
记录当前已用的最大uid(不记表二里的)

不知我说明白没有,反正就是这个意思,表三也可以用一临时文件代替

[ 本帖最后由 yanjing5462 于 2006-3-15 21:54 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP