发表评论
#2楼 [
楼主]2005-04-27 09:13 |
兄弟,请在数据层面,不要表示层面,要是用Winform呢?要是用Winform又关程序,下次又要接着上次程序的的选择结果选呢(就是上次程序中选过了,这次就不选了)?
用两个HashTable A和B,一开始都放在A里面,
从A里面随机抽取一个显示然后放到B里面,
直到A里面没有了,然后再从B里面抽取往A里面放。
在数据层?
OK,给这两个HashTable在包装一下
让它记住从那个HashTable取的
然后外面都从这个外壳获取。
还要接着上次?
那么不用HashTable了。用表吧。
汗。。。。我这一下子回了3次。。。。。
#6楼 [
楼主]2005-04-27 09:24 |
呵呵,你的这个思路和我开始的一样,不过后来我用了更方便的方法。
似乎有点像洗牌算法~~~~
只要洗好牌,按顺序显示就OK~~显示完一遍,再洗牌~~~
完全随机不太可能
本要想把88个一起排列一下的,再随机取一个排列。但这时排列数也实在太大了。
现在欺骗一下,88个分为8组,一组11个,11的排列就少了。
每次取8组11的排列。就是能保证公平的。
就是说,其实出现的时候基本是会以11个一组一起出现的,如果某次某某跟某某在一块,下次也基本在一块,只是换了几个位置而已(不会超过11个)。反正等下次轮回来的时候,人家也忘了。
如果轮换次数多了,可以随机把88个重新分一次组
一时说不清楚。
#9楼 [
楼主]2005-04-27 09:45 |
@mikespook:
问题是显示完一遍并不一定是整数次次数,比如88个,每次10个,你第9次显示要浪费2个广告位。
@lichdr:
这么长还没说清楚,兄弟的。。。。
#10楼 [
楼主]2005-04-27 09:46 |
@lichdr :反正等下次轮回来的时候,人家也忘了。----万一有个记得的呢?哈哈
为了解决问题,做成滚动广告。呵呵,是不是不用动脑的最简单方法啊。
显示完一遍就如mikespook所说的洗牌。
#12楼 [
楼主]2005-04-27 10:12 |
是数据层面的,没见上面我说开始也想到用两个表来做吗
我比较喜欢在数据库中通过排序来排列,表中有一个自动 selectcount自动表示选中的次数
例如这样:
select top 1 * from .. order by selectcount,newid()
#14楼 [
楼主]2005-04-27 10:51 |
# re: “这块布的艺术成分都几高唧!”“有几高啊?”“三、四层楼那么高啦。” 删除评论 修改评论
以员工福利为例,为员工表建一个int字段flag
select top x 员工ID from 员工表 order by flag,newid()
再update 员工表 set flag = flag + 1 where 选出的员工编号
仁渣 评论于 2005-04-27 08:53
哈哈,牙神跟我的做法一样,这是我早上写在另一个贴的答案。
#16楼 [
楼主]2005-04-27 11:24 |
随机性如何没有保证?
#18楼 [
楼主]2005-04-27 14:03 |
仁渣用事实证明。
要不要我证明一下Window能删除你硬盘上的一个文件。
1+1=2 都是要证明的问题何况是newid()的随机性问题,
在一定程度上讲,这个问题是 “定理” 不是 “公理” ,公理不要证明,定理必须证明之后才能说他成立。
我就不明白,为什么你能保证随机性!?
#20楼 [
楼主]2005-04-27 15:41 |
这年头钻牛角的人还不少啊,
1、请你证明1+1=2;
2、请证明你是男人。
随机性写个测试脚本统计一下就知道了,还是可以的,但是newid的方法在没有效率上的考虑,不过这种广告什么的数据也大不到哪里去:),另外就是只有sql2000好用:(
要是我的数据源不是数据库呢?要是我的数据源只是xml文件呢?人渣傻了吧?
#23楼 [
楼主]2005-04-28 13:10 |
这世界还有人真傻啊,XML就不行了?
这里有叫人渣的吗?
“哈哈”多好的一个词,我说你怎么就。。。。。
这个东西我做广告系统的时候,就没想到好的解决办法.看楼主的了
# re: 三下五除二解决部分数据啐取的随机性和公平性。
# re: “这块布的艺术成分都几高唧!”“有几高啊?”“三、四层楼那么高啦。” 删除评论 修改评论
以员工福利为例,为员工表建一个int字段flag
select top x 员工ID from 员工表 order by flag,newid()
再update 员工表 set flag = flag + 1 where 选出的员工编号
仁渣 评论于 2005-04-27 08:53
哈哈,牙神跟我的做法一样,这是我早上写在另一个贴的答案。
你这种做法我觉得不妥,一个网站如果流量大的话,显示的次数很频繁,你这样没显示一条,就UPDATE一下,频繁的数据库修改操作,这样效率会很低,对流量小的合适。
#26楼 [
楼主]2005-05-18 11:41 |
如果是在网站上显示一些新闻、公告之类的就不存在很大的公平性问题,只用newid()就行了。
把88條記錄放到一個靜態循環鏈表中
每次讀取10個,循環進行