请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 2662|回复: 9

[asp] [原创]利用正弦函数Sin()真正实现ACCESS的随机选取记录 [复制链接]

jorkin2000 楼主
帖子
589
体力
1395
威望
0
发表于 2009-12-11 16:08:21 |显示全部楼层
利用正弦函数Sin()真正实现ACCESS的随机选取记录

不多说了.非常简单.

建一个ASP函数:
<%
'功能:真正实现ACCESS随机选取记录功能
'来源:http://jorkin.reallydo.com/article.asp?id=653

Function NewID(PKey)
    NewID = " Sin(" & PKey & "*" & Timer & ") "
End Function
%>

ASP代码:
<%
sNewOrder = NewID("id") '这里的ID是数据类型为数字(最好用自动编号列)
Set oRs = Exec("Select Top 20 id,compname,fund,foundyear," & sNewOrder & " AS NewID From company where fund>100 Order By " & sNewOrder)
Trace(oRs)
%>

说明:这个方法如果在记录集过大的时候也会很费时间,所以请先通过Where条件筛选后再随机排序。

[ 本帖最后由 jorkin2000 于 2009-12-11 19:20 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
好用的分页类:http://jorkin.me
西部数码顶级域名注册商39元抢注!

罗亮

超级版主 手机认证 

帖子
15893
体力
19481
威望
19
居住地
北京市 海淀区
发表于 2009-12-11 16:52:09 |显示全部楼层
ORDER BY NEWID() 不行么?
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

jorkin2000 楼主
帖子
589
体力
1395
威望
0
发表于 2009-12-11 16:56:53 |显示全部楼层
newid是mssql的

这里是想实现access数据库的排序

直接用 order by rnd() 是没用的。
好用的分页类:http://jorkin.me

使用道具 举报

wzh307 
帖子
335
体力
5263
威望
0
发表于 2009-12-11 17:37:22 |显示全部楼层
我昨天搞了一晚上,网上有说是用 order by rnd(id)的,但是这样不行,每次生成随机的都是一样的。
还有用时间的,用随机数的。
我用的是随机数,可以用。
.net 版本:
Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
int intRandomNumber = rnd.Next();
string strSql = string.Format("select top {0} * from TableName where TypeId = {1} order by Rnd(" + (-1 * intRandomNumber) + "*id)", num, typeId);
大志大红

使用道具 举报

SenFe 

盛飞

钻石会员 手机认证 

帖子
6222
体力
12066
威望
14
居住地
四川省 成都市
发表于 2009-12-11 21:31:24 |显示全部楼层
Randomize
……Order By Rnd(-(Id+" & Rnd() & ")) Desc
承接程序定制、修改。

使用道具 举报

剑气

超级版主 手机认证 

帖子
7305
体力
18875
威望
178
居住地
湖北省 黄冈市
发表于 2009-12-11 23:24:33 |显示全部楼层
不推荐用数据库的随机选取,慢,用PHP或ASP提前写出算法再求是个不错的答案
@ Blog @ 微博
我即使被关在果壳之中,仍然自以为无限空间之王。

使用道具 举报

lmxc 

最爱星辰

银牌会员 手机认证 

帖子
1241
体力
2255
威望
0
居住地
北京市 昌平区
发表于 2009-12-11 23:25:47 |显示全部楼层
原帖由 jorkin2000 于 2009-12-11 16:56 发表
newid是mssql的

这里是想实现access数据库的排序

直接用 order by rnd() 是没用的。

MsSql随机取数据 select top 10 * from c_cy_admin order by newid()
Access 随机取数据 select  top 10 id FROM 表1 order by rnd(id)
mySql 随机取数据 SELECT id FROM gueze order by rand() limit 10

要在rnd后加(id)才有效果
COS幻想 万网代理

使用道具 举报

帖子
40
体力
106
威望
0
居住地
贵州省 贵阳市
发表于 2009-12-12 10:16:28 |显示全部楼层
access里面执行order by rnd(id)可以,但是在asp页面上刷新后不会变化,应该是因为连接没有关闭

使用道具 举报

lb1104 

罗兵

银牌会员 手机认证 

帖子
206
体力
1965
威望
0
发表于 2009-12-12 15:13:32 |显示全部楼层
用 这个就可以了
Randomize()   
intRandomNumber=Int(1000*Rnd)+1                  
sql="Select * FROM Table ORDER BY Rnd("&-1*(intRandomNumber)"*id)"
ask

使用道具 举报

jorkin2000 楼主
帖子
589
体力
1395
威望
0
发表于 2009-12-17 13:16:04 |显示全部楼层
原帖由 SenFe 于 2009-12-11 21:31 发表
Randomize
……Order By Rnd(-(Id+" & Rnd() & ")) Desc


你试过么?这样怎么刷新页面显示的都是同样的记录。

Access 随机取数据 select  top 10 id FROM 表1 order by rnd(id)

这个经事实证明是错误的。

[ 本帖最后由 jorkin2000 于 2009-12-17 13:18 编辑 ]
好用的分页类:http://jorkin.me

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-12 06:53 , Processed in 0.079771 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部