| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 678 人关注过本帖
标题:索引使用问题
只看楼主 加入收藏
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
索引使用问题
请教高手吹水佬,上次你给的代码,
SELECT *FROM lsb WHERE 年级=="七年级" INTO  cursor ccb
 
 INDEX on RAND(RECNO()) TAG 班序 (同班不能排在一起,但在实际使用时,出现一些怪现象,偶尔出现同班连排,
特别数据少(70以下)都是按班级顺排,根本没有效果,究竟是什么原因我查不到,吹水佬能帮忙吗?)
2015-11-29 12:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:5 
用 RAND() 作索引关键字来产生乱序有点投机取巧,当时也有重点提到过这个问题。
可靠的做法是先将同级各班考生按列排队,做到同班考生不连续排队。生成这个“同级考生表”不难的,关键是最后的如果都是同班的怎样处理,是用空位隔开还是怎样?

[此贴子已经被作者于2015-11-29 14:23编辑过]

2015-11-29 14:22
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
首先感谢吹水佬。各位高手有什么妙招?同班不能相连的排序
2015-11-29 15:35
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
用rand()可以,增加一个字段作为随机数据,然后排序,但怎样避免产生重复数据呢?
2015-11-29 16:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
要求不高的只是随便乱序用RAND()还可以。
象这种要求严谨的情况还是不要采用,RAND()的不重复性也是有限的。
或者可以考虑这样:
程序代码:
CREATE CURSOR 级表 (班号 C(10), 姓名 C(10))
CREATE CURSOR 班1  (班号 C(10), 姓名 C(10))
CREATE CURSOR 班2  (班号 C(10), 姓名 C(10))
CREATE CURSOR 班3  (班号 C(10), 姓名 C(10))
FOR i = 1 TO 50
    INSERT INTO 班1 VALUES (PADL(i, 2, "0") + "_1班", "姓名_1班" + PADL(i, 2, "0"))
    INSERT INTO 班2 VALUES (PADL(i, 2, "0") + "_2班", "姓名_2班" + PADL(i, 2, "0"))
    INSERT INTO 班3 VALUES (PADL(i, 2, "0") + "_3班", "姓名_3班" + PADL(i, 2, "0"))
ENDFOR
SELECT 级表
APPEND FROM DBF("班1")
APPEND FROM DBF("班2")
APPEND FROM DBF("班3")
INDEX on 班号 TAG 班号
BROWSE

如果各班人数不等,APPEND FROM 要考虑先后次序,人数越多的放到越后,多出来的另行处理。
2015-11-29 16:53
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
先感谢
2015-11-29 17:06
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
方法可以,但在实际使用可能不是很理想
2015-11-29 17:25
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
我还是思考INDEX on RAND(RECNO()) TAG 班序,为什么多数据还是可以得,而数据少不产生效果呢?
2015-11-29 17:32
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
请教吹水佬,我还是不明白,用你提供的数据尽量减少,效果还是可以,但我先把学生分配到考场,再把一个考场数据选出再排就没有效果。
由于在实际中每个考场人数不一样。可能有64,61、67、58等等,如果按你设计考场表,8行8列,64比较易容选出,而像
61、67、58怎样选出来呢?

[此贴子已经被作者于2015-11-29 17:57编辑过]

2015-11-29 17:55
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:5 
我觉得,班级人数不同,每个考场的容量也不一样,却要使每个考场里的同班学生不能排一起的这个案例,可能需要人工干预的,不可能完全做到全随机。这可能需要事先安排一种可行的算法,然后才能根据这种算法去写代码。
2015-11-29 19:35
快速回复:索引使用问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.081930 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved