急!一个发票校正号的问题,比较复杂,高手请进!

skystar008 2006-02-25 08:51:50
要完成一个发票校正功能,在设计过程中出现了一些问题,欢迎大家指点。

数据库结构
autoid userid num_start num_end num_used flag

autoid: 自动编号
userid: 管理员ID
num_start: 票据起始号
num_end: 票据结束号
num_used: 发票校正号,必须唯一,它是一组递增的数字。
flag: 新开票据标志(新添加一组票据标记为1,使用过程中插入的数据标记为0)

功能说明:
每个管理员可以有多组票据,但必须在一组使用完时再用另一组,而且是从小的那一组开始用,再用大的票据组。
每插入一组数据时 "num_used"会递增一个,直到这一组数据用完为止,再去衔接该管理员的下一组票据。

举例:
autoid userid num_start num_end num_used flag
1 2 1 1000 0 0
2 2 1 1000 0 0
3 2 1 1000 1 1
4 3 1001 3000 0 0
5 2 1 1000 2 1
6 2 3001 5000 0 0
....
1101 2 1 1000 999 1


数据说明:
autoid为1、2、4、6的是超级管理员给管理员新开通的票据(flag标记为0),其他的是在使用过程中新增的数据。
问题:
如何去查寻每个管理员自己的票据组,并找到当前正在使用的那组票据,不致于混乱。
如果该管理员没有票据,或票据用完时,就要提醒。还有当一组票据用完时,如何去配对
该管理员的下一组较小的票据组,也就是换一组票据,重新开始使用。
...全文
275 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
skystar008 2006-03-05
  • 打赏
  • 举报
回复
感谢大家给我思路。调试基本通过,明天去见客户去了。
ice_berg16 2006-02-25
  • 打赏
  • 举报
回复
前二个问题helloyou0已经解答了,
最后一个有些问题
我觉得最后一个问题楼主的意思是找出某个管理员的当前最小可用票据组,
应该这样
select * from table where flag=0 and userid=2 order by num_start limit 1;
helloyou0 2006-02-25
  • 打赏
  • 举报
回复
就你目前的表:
如何去查寻每个管理员自己的票据组,

select * from table where userid=2 order by num_start, num_used

并找到当前正在使用的那组票据,不致于混乱。

select * from table where userid=2 where flag=1 order by num_start, num_used

如果该管理员没有票据,或票据用完时,就要提醒。还有当一组票据用完时,如何去配对
该管理员的下一组较小的票据组,也就是换一组票据,重新开始使用。

select userid, min(num_end - num_used) from table where flag=1 order by userid
这个里面等于0的user就是用完了的,需要领新票据,然后update flag=0




helloyou0 2006-02-25
  • 打赏
  • 举报
回复
全部记录的话,
好像分两个表比较好。
一个领用表
一个票据记录表
skystar008 2006-02-25
  • 打赏
  • 举报
回复
废旧表是有的,只是我没有提供出来,现在只是列出问题的最重要部分。
skystar008 2006-02-25
  • 打赏
  • 举报
回复
你一次到银行里取两次款,为什么有两张票据啊,财务上的规则就是这样啊。
helloyou0 2006-02-25
  • 打赏
  • 举报
回复
那还是象berg说的修改比较好吧,
要保存作废的,不如另加一张废票表。
skystar008 2006-02-25
  • 打赏
  • 举报
回复
不能update啊,每组数据都有用处的。
helloyou0 2006-02-25
  • 打赏
  • 举报
回复
3 2 1 1000 1 1 第一次使用的。
4 3 1001 3000 0 0使用过程中又开通一组新的票据。
5 2 1 1000 2 1第二次使用的。

哦,那为什么不使用update,

3 2 1 1000 1 1 第一次使用的。
4 3 1001 3000 0 0使用过程中又开通一组新的票据。

使用票据后 update 记录3

3 2 1 1000 2 1 第二次使用的。(这样不用每次插入新记录)
4 3 1001 3000 0 0使用过程中又开通一组新的票据。

这样保证每个用户正在使用的记录只有一条




skystar008 2006-02-25
  • 打赏
  • 举报
回复
对,你的的理解是对的,我的意思是说比如1~1000这是一组票据,当开完一次时就在要在这组票据里写一个已使用的记录就是1,当开第二张发票的时候就是2,以此类推啊。直到1000,然后就要开始使用下一组票据了。
helloyou0 2006-02-25
  • 打赏
  • 举报
回复
这个第二此使用的什么意思呢?票据不是使用一次就完成了吗
还有“使用过程中插入的数据”也不是太明白,

给讲讲整个流程吧

我目前的理解是象银行的重要票据一样,不能随便拿了用,
每次要头头批准,登记了后,一本一本依次用,
这个表就是用来登记票据领用信息的,不知道是否正确。
skystar008 2006-02-25
  • 打赏
  • 举报
回复
疑问1:
新添加一组票据标记为0,使用过程中插入的数据标记为1)
不好意思。
疑问2:
1 2 1 1000 0 0
2 2 1 1000 0 0
去掉一组,复制时重复了。
疑问3:
3 2 1 1000 1 1 第一次使用的。
4 3 1001 3000 0 0使用过程中又开通一组新的票据。
5 2 1 1000 2 1第二次使用的。
skystar008 2006-02-25
  • 打赏
  • 举报
回复
为什么使用票据后要添加记录呢,直接在该票据上修改num_used不就行了吗,
这样不是更方便?
===================================
他要记录每个票据的,有的票据是作废的,也要在数据库里能查找到。
所以每个记录都要放在里。
helloyou0 2006-02-25
  • 打赏
  • 举报
回复
疑问1:
lag: 新开票据标志(新添加一组票据标记为1,使用过程中插入的数据标记为0)
autoid为1、2、4、6的是超级管理员给管理员新开通的票据(flag标记为0),其他的是在使用过程中新增的数据。
这两句矛盾?有一句写反了?

疑问2:
每个管理员可以有多组票据,但必须在一组使用完时再用另一组,而且是从小的那一组开始用,再用大的票据组。
autoid userid num_start num_end num_used flag
1 2 1 1000 0 0
2 2 1 1000 0 0
票据号为什么会有重复的呢?相同的票据号怎么区分呢?

疑问3:
3 2 1 1000 1 1
4 3 1001 3000 0 0
5 2 1 1000 2 1
不是“但必须在一组使用完时再用另一组” 吗,为什么2同时在用两组?


ice_berg16 2006-02-25
  • 打赏
  • 举报
回复
为什么使用票据后要添加记录呢,直接在该票据上修改num_used不就行了吗,
这样不是更方便?
skystar008 2006-02-25
  • 打赏
  • 举报
回复
自己顶~!

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧