好心情Blog

回忆过去发生的,记录现在拥有的,展望未来改变的。

Jul
4
在ACCESS+ASP环境下实现随机排序的简单解决方案

在做Z-Blog的新样式时想随机取N个Tags放到右侧的,但实际操作时却遇到了问题--就是在Access中如何对记录进行随机排序的问题。

在SQL Server中想进行随机排序(随机取N条记录)只需要简单地加个“Order By Rnd()"或”Order By NewID()"就搞定了,但这招到了ACCESS中却不好用了。在ACCESS中用以上Order排出来的结果每次都是一样的。在网上搜了一下,也没有找到比较有建设性的解决方案,大多数都是建议用SQL语句查询出全部记录,然后在ASP中进行随机排序。

在ASP中排序我是不喜欢的,因为这样一来就得对Z-Blog的源码进行大改,而不是只改一个查询语句了。装上ACCESS试了N久,发现用“Select * From [Blog_Tag] Order By Rnd(Tag_ID)"可以实现对记录集的随机排序(其中Tag_ID是[Blog_Tag]这个表的主键『下同』--不必非是主键,只要是数字类型的字段就可以了)。但奇怪的是在ACCESS中明明可以随机排序的,在ASP中用同样的语句进行查询却还是每次查询出的记录集顺序相同。

再试…… 最后终于发现用“SELECT  * FROM [blog_Tag] ORDER BY Rnd(tag_id-timer())”在ASP跟ACCESS中查询得到的记录集是随机排序的了。但奇怪的是用Rnd(tag_id+timer())或Rnd(timer()-tag_id)做条件竟然都不行,怪!!

====================
这么一来在Z-Blog中实现随机取前N条记录放到侧边栏就简单了:

  1. \Function\c_system_event.asp中第1200行左右的Set objRS=objConn.Execute("SELECT * FROM [blog_Tag] ORDER BY [tag_Order] DESC,[tag_Count] DESC,[tag_ID] ASC") [在BlogReBuild_Tags这个函数中]替换为SELECT Top 50 * FROM [blog_Tag] ORDER BY rnd(tag_id-timer()) [其中50为要随机选择的关键词个数,自己想要多少个随便改]
  2. 在模板的侧边栏中把Tags云集缓存文件引用进去:在适当位置加入<#CACHE_INCLUDE_TAGS#>

以上两步就可以了。如果想效果再好一点的话请再接着改:

  1. 还是在\Function\c_system_event.aspReBuild_Tags函数中,也是1200行左右,把strTag=strTag & "<li><a href="""& Tags(objRS("tag_ID")).Url & """>"+Tags(objRS("tag_ID")).Name + " (" & Tags(objRS("tag_ID")).Count & ")" +"</a></li>"替换为strTag=strTag & "<a style='font-family:verdana,sans-serif;line-height:150%;font-size:"& 12 + (Tags(objRS("tag_ID")).Count/2) &"px;margin:10px;' title='" & Tags(objRS("tag_ID")).Count & "' alt='"&  Tags(objRS("tag_ID")).Count  &"' href='" & Tags(objRS("tag_ID")).Url &"'>" & Tags(objRS("tag_ID")).Name  & "</a>"
  2. 再搭配Z-Blog多彩Tags插件使用效果更佳。

PS: 明天去武汉,可能又一个周不能写Blog了。

评论[ 0 ]

发表评论:

Blog搜索

Blog分类

RSS订阅



可能与本文相关的广告

最新评论及回复

留言本最新留言

最新文章

Tags云集

Powered by Z-Blog and Template by 软件兔. 随意转载, 但请在文章中加上本站链接:〖好心情Blog〗