数据库记录排除

dingyanwei 2009-12-12 05:15:25
大家有没有记录排除方面的技巧啊?

比如:数据库中有1万条记录,我要随机多次从里面抽取2000条记录,第一次好说随便找500个抽出来了,第二次要排除第一次的500条记录,以此类推,越往后越麻烦,我现在的方法是where条件排除。

谁有好办法。

数据库要多人同时操作,最多可能要超过1000人并发操作
...全文
205 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingyanwei 2009-12-14
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091214/11/f09167b7-af65-4a45-9898-20b2a5caabc4.html

再开一贴用于讨论in的
king06 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 dingyanwei 的回复:]
引用 35 楼 jhone99 的回复:
每次这样取数据


select *
  from mytable 
  where id not in(select 已抽取id from 抽取记录表 where 客户='u1'


*****************************************


然后把该用户u1及本次用的id加入 抽取记录表


确实是我想要的结果,不过并发过多的话,这种操作不知道对服务器的压力如何。
我总想要一种没有写操作的方式,不过应该是不太可能了。
[/Quote]
跟加标志位的压力一样...也需要写数据库,这个在所难免的(已抽取id不就是要记录的嚒)
只能加标识,按人员来轮询;
查询条件可以为固定,倒是可以用记录集的requery 方法来操作

阿泰 2009-12-14
  • 打赏
  • 举报
回复
添加个记录表是必要的
如果原始数据表里有一个自增ID主键的话,那更好处理些。
设置可以不用记录表。

在程序中控制即可

比如第一次取Select * From ID<=500,第二次取Select * From ID>500 and ID=1000

不过也最好还是在表中记录一下,防止程序异常终止造成问题。
这样的好处是只要记录一个端点就可以了,不用记录一堆编号。而且因为不用IN或Not IN,效率会高一些。
jhone99 2009-12-14
  • 打赏
  • 举报
回复
如果是一次性的,可以全部记录读取加到集合里,用过的从集合里删除

如果不是一次性的,用户本级建一个excel表或文件,这样不会对数据库操作,但实际还不如直接对数据库操作的效率
hwmys 2009-12-14
  • 打赏
  • 举报
回复
看来还是没整明白
dingyanwei 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 jhone99 的回复:]
每次这样取数据


select *
  from mytable 
  where id not in(select 已抽取id from 抽取记录表 where 客户='u1'


*****************************************


然后把该用户u1及本次用的id加入 抽取记录表
[/Quote]

确实是我想要的结果,不过并发过多的话,这种操作不知道对服务器的压力如何。
我总想要一种没有写操作的方式,不过应该是不太可能了。
jhone99 2009-12-14
  • 打赏
  • 举报
回复
每次这样取数据


select *
from mytable
where id not in(select 已抽取id from 抽取记录表 where 客户='u1'


*****************************************


然后把该用户u1及本次用的id加入 抽取记录表
jhone99 2009-12-14
  • 打赏
  • 举报
回复
建议新建一个表,设两个字段

表名:抽取记录表
字段:已抽取id 客户
数据: 00005 u1
00056 u1
03200 u1
00103 u1
00050 u1
01056 u1
……
03020 u2
00111 u2
10050 u2
01010 u2
……
bancxc 2009-12-13
  • 打赏
  • 举报
回复
10000条数据 一次抽出500 也就抽个20次就完事了
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
0楼描述是有点容易发生歧义,不好意思了。
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
前面解释过了,每个人抽取不能重复,但人与人之间的没有关系。
也就是每个客户端对应的都是2w,要不然1000人操作,一个人抽取1000个记录,2w个是不够的。
阿泰 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 dingyanwei 的回复:]
引用 25 楼 babyt 的回复:
引用 24 楼 dingyanwei 的回复:
引用 23 楼 ybh37 的回复:
引用楼主 dingyanwei 的回复:
....

你说的标志位是建立一个字段用来标记已经抽取过的意思吗?
如果是的话,
客户1,抽取并标记了这个字段
那么客户2抽取时怎么办?

如果再增加一个字段用来标记是哪个客户抽取的,那么这个字段在标记为“客户1”的时候
客户2怎么办?是更新客户1为客户2还是,等待客户1完成后再标记?
[/Quote]

这个描述跟你的开题描述不大一样。当然,也可能是我理解不透彻,重新梳理一下。

比如1w条记录,x个用户操作。
是每个用户都要取到这1w条记录进行自己的操作
还是大家都一起操作这1w条,
比如a取掉以后500条之后,那下次a取的时候肯定是从剩下的9500中去取。
但是如果是b第一次取的时候,他是从a取剩下的9500条里取,还是让需要从最初的1w条里取?
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 patrickkong 的回复:]
加个table。
[/Quote]
具体说说,要考虑有1000人可能同时操作
  • 打赏
  • 举报
回复
加个table。
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 babyt 的回复:]
引用 24 楼 dingyanwei 的回复:
引用 23 楼 ybh37 的回复:
引用楼主 dingyanwei 的回复:
大家有没有记录排除方面的技巧啊?

比如:数据库中有1万条记录,我要随机多次从里面抽取2000条记录,第一次好说随便找500个抽出来了,第二次要排除第一次的500条记录,以此类推,越往后越麻烦,我现在的方法是where条件排除。

谁有好办法。

数据库要多人同时操作,最多可能要超过1000人并发操作


同意21楼的办法
在表中加一个标志位,选过的置一个标志不就完了吗?


并发啊并发,看清楚并发


并发并不会影响到这个标志位的添加。
数据库自己能处理这些并发的,处理不了他会排队。

教之初随便做个简单测试就好,呵呵。
比如就取500条,然后做个标志位。
而不是纯粹靠想的。 :)

[/Quote]

你说的标志位是建立一个字段用来标记已经抽取过的意思吗?
如果是的话,
客户1,抽取并标记了这个字段
那么客户2抽取时怎么办?

如果再增加一个字段用来标记是哪个客户抽取的,那么这个字段在标记为“客户1”的时候
客户2怎么办?是更新客户1为客户2还是,等待客户1完成后再标记?
lxq19851204 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 myjian 的回复:]
我是路过的,请无视我....................
[/Quote]]
....................
嗷嗷叫的老马 2009-12-13
  • 打赏
  • 举报
回复
我是路过的,请无视我....................
阿泰 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 dingyanwei 的回复:]
引用 23 楼 ybh37 的回复:
引用楼主 dingyanwei 的回复:
大家有没有记录排除方面的技巧啊?

比如:数据库中有1万条记录,我要随机多次从里面抽取2000条记录,第一次好说随便找500个抽出来了,第二次要排除第一次的500条记录,以此类推,越往后越麻烦,我现在的方法是where条件排除。

谁有好办法。

数据库要多人同时操作,最多可能要超过1000人并发操作


同意21楼的办法
在表中加一个标志位,选过的置一个标志不就完了吗?


并发啊并发,看清楚并发
[/Quote]

并发并不会影响到这个标志位的添加。
数据库自己能处理这些并发的,处理不了他会排队。

教之初随便做个简单测试就好,呵呵。
比如就取500条,然后做个标志位。
而不是纯粹靠想的。 :)
dingyanwei 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ybh37 的回复:]
引用楼主 dingyanwei 的回复:
大家有没有记录排除方面的技巧啊?

比如:数据库中有1万条记录,我要随机多次从里面抽取2000条记录,第一次好说随便找500个抽出来了,第二次要排除第一次的500条记录,以此类推,越往后越麻烦,我现在的方法是where条件排除。

谁有好办法。

数据库要多人同时操作,最多可能要超过1000人并发操作


同意21楼的办法
在表中加一个标志位,选过的置一个标志不就完了吗?
[/Quote]

并发啊并发,看清楚并发
咸清 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 dingyanwei 的回复:]
大家有没有记录排除方面的技巧啊?

比如:数据库中有1万条记录,我要随机多次从里面抽取2000条记录,第一次好说随便找500个抽出来了,第二次要排除第一次的500条记录,以此类推,越往后越麻烦,我现在的方法是where条件排除。

谁有好办法。

数据库要多人同时操作,最多可能要超过1000人并发操作
[/Quote]

同意21楼的办法
在表中加一个标志位,选过的置一个标志不就完了吗?
加载更多回复(21)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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