求大大帮忙想个好点的办法@!~

lqsmn613 2012-08-06 01:30:46
具体情况如下:
我现在在开发一个收据管理的系统的。
差不多完成了,可是在系统内的数据量很大,涉及批量调拨的问题;
在收据的基础信息中,每一本收据是一条记录,有一个收据管理号(唯一),还有一个开始收据号,一个结束收据号。
比如:
收据管理号 开始收据号 结束收据号
SJ0001 00001 00050 代表这本收据是有50页一本的,当然还有其他25一本的等等,这不是重点。


之前,由于考虑到调拨数据量较大的问题,我是直接让其手动填写需调拨的收据的开始号,与结尾号,然后将符合条件的收据进行调拨,避免那种以勾选的方式调拨中,容易引起人烦躁的问题,哎,私企的无奈,要考虑领导的感受啊。

可是,现在问题来了,之前的收据由于管理不善,导致有重复收据的发生,如果按照我上面所写的调拨方式的话,就会把重复的收据全部都调拨出去了,这不合理。

那么,请问各位大大有啥好的建议伐,全部分数敬上!

本人开发经验较少,悲剧啊!~!
...全文
137 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
初学额 2012-08-06
  • 打赏
  • 举报
回复
高手即将出现
cxw3152 2012-08-06
  • 打赏
  • 举报
回复
有点难度。。
secretx 2012-08-06
  • 打赏
  • 举报
回复
简单地说,你的主键没有重复,但是记录的内容上有重复。distinct 只能滤掉主键重复。不起根本作用。可以试一下先导出为某种格式文件,再写个 C代码,什么语言都行,读取那个文件,去重就可以了。注意分批导出控制文件大小,再就看你算法了,效率不要太差。全部去重完毕后,清空表,在导入数据库。我想到了另外一个思路,得看你java SE基础,SJ0001 00001 00050这个表所对应的java类,重写他的hashcode方法,只比较他的内容(也就是后两列,忽略他的主键列,不要让第一列参与hash算法),这样的话,内容一样的即使主键不同也算同一个,然后把用到这个类的集合属性,用 Set.利用java Set自动去重功能。一切OK
lqsmn613 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 4 楼 的回复:
引用 1 楼 的回复:

引用楼主 的回复:
具体情况如下:
我现在在开发一个收据管理的系统的。
差不多完成了,可是在系统内的数据量很大,涉及批量调拨的问题;
在收据的基础信息中,每一本收据是一条记录,有一个收据管理号(唯一),还有一个开始收据号,一个结束收据号。
比如:
收据管理号 开始收据号 结束收据号
SJ0001 00001 00050 代表……
[/Quote]
我这个系统是用于平时总公司与分子公司之间的收据调拨的,他只是一个管理的东西,比如这个就可以避免重复的问题再次出现啊。
这个系统不涉及具体的收据使用操作。
qybao 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 1 楼 的回复:

引用楼主 的回复:
具体情况如下:
我现在在开发一个收据管理的系统的。
差不多完成了,可是在系统内的数据量很大,涉及批量调拨的问题;
在收据的基础信息中,每一本收据是一条记录,有一个收据管理号(唯一),还有一个开始收据号,一个结束收据号。
比如:
收据管理号 开始收据号 结束收据号
SJ0001 00001 00050 代表这本收据是有50页一本的,当然……
[/Quote]
现实中的收据编号可能有重复,但收据填写时候应该有日期区分的吧,否则他们怎么查,总不会一本一本去翻吧,该翻哪本(哪年哪个月)应该心里有个数吧,这些信息应该也要反映到你的数据库。

lqsmn613 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

这个问题的关键在于楼主想对重复数据如何处理?是任意选择其中的一条?又或者是某一条中的某一列能满足楼主的筛选条件?又或者是别的。。。?

我想提醒楼主的是,sql本身就有去重复的功能:关键字<distinct>
具体用法可以去网上找。。。
[/Quote]
去重复的功能我知道的,我知道有这种情况出现的时候,第一个想法就是任意选择其中一条来操作好了,可是业务部门想在调拨重复收据的时候,所调拨的重复收据可以是连续的。
因为实际中,收据的印制都是一批批产生的,而需要的分公司通常也是同一家,所以他们想的是在调拨之后看到的收据管理号能够是顺序的,而不是乱的,所以这里有点矛盾,我也是很蛋疼。。。
lqsmn613 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

引用楼主 的回复:
具体情况如下:
我现在在开发一个收据管理的系统的。
差不多完成了,可是在系统内的数据量很大,涉及批量调拨的问题;
在收据的基础信息中,每一本收据是一条记录,有一个收据管理号(唯一),还有一个开始收据号,一个结束收据号。
比如:
收据管理号 开始收据号 结束收据号
SJ0001 00001 00050 代表这本收据是有50页一本的,当然还有其他25一本的等等,这……
[/Quote]

恩,那我举个例子,就是说收据管理号是不重复的,因为这个是我人为设定的,在收据保存进系统的时候自动分配的。
所谓的重复就是,这里的开始号与结尾号是每一张收据上面实际存在的编号,而这个编号是有重复的现象。
比如上述的例子:
SJ0001 00001 00050
这一本收据是从00001号开始到00050号结束的50张收据组成的一本收据。
重复的实际意思就是还有一本从00001号开始到00050号结束的50张收据组成的一本收据。
那么以上两本收据就是重复的,因为在现实中,是没有收据管理号的,而只是在每一张收据上面有编号,所以实际操作的人员无法把收据管理号与实际的编号结合到一起,他们所能记得的只有编号而已,而偏偏作为调拨条件的编号却有重复的出现,所以……………………
我这么说能明白吗?
it491328322 2012-08-06
  • 打赏
  • 举报
回复
这个问题的关键在于楼主想对重复数据如何处理?是任意选择其中的一条?又或者是某一条中的某一列能满足楼主的筛选条件?又或者是别的。。。?

我想提醒楼主的是,sql本身就有去重复的功能:关键字<distinct>
具体用法可以去网上找。。。
Sammie 2012-08-06
  • 打赏
  • 举报
回复
竟然把我看晕了...
qybao 2012-08-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
具体情况如下:
我现在在开发一个收据管理的系统的。
差不多完成了,可是在系统内的数据量很大,涉及批量调拨的问题;
在收据的基础信息中,每一本收据是一条记录,有一个收据管理号(唯一),还有一个开始收据号,一个结束收据号。
比如:
收据管理号 开始收据号 结束收据号
SJ0001 00001 00050 代表这本收据是有50页一本的,当然还有其他25一本的等等,这不是重点。


之前……
[/Quote]
重复收据是什么样子的?LZ是怎么选择数据
比如
SJ0001 00001 00050 50页一本
SJ0002 00001 00025 25页一本

选择的时候 开始收据号 <= 用户输入开始 and 结束收据号 >= 用户输入结束
而导致重复吗?

LZ最好用例子说明一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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