Register  |  Login

不一样的分页算法

Posted in [DNN使用及思考], [DNN模块开发], [杂项] By baldwin
最近开始对本网站的Blog模块进行"大手术"改动,其中包括一些以下功能:
1) SEO优化
2) 分页支持
3) TagClouds功能
4) 可自定义URL显示
等等,相信修改完之后会给大家一个惊喜,原来DNN也可以如此利用 :)
废话少说,切入正题,在此无非想分享一下最近研究分页算法的心得,也就是发现一个比较有意思的算法,也许不是最优的,也不是最好,当然也不推荐使用,但是在此列举一下以博各位一哂:
 
  1. CREATE PROCEDURE {databaseOwner}[{objectQualifier}Radiant_ListEntriesByPortal]   
  2.     @PortalID int,   
  3.     @MaxEntries int = 10,   
  4.     @CurrentPage int = 1   
  5. AS  
  6.     SELECT TOP(@MaxEntries * @CurrentPage)   
  7.         U.[UserID],   
  8.         U.[Username],   
  9.         U.[FirstName] + ' ' + U.[LastName] AS UserFullName,   
  10.         E.[EntryID] as ItemID,   
  11.         E.[BlogID],    
  12.         E.[Title],   
  13.         E.[Description],   
  14.         E.[Entry],   
  15.         E.[AddedDate],   
  16.         E.[Published],   
  17.         E.[Copyright],   
  18.         E.[PermaLink],   
  19.         IsNull(E.[AllowComments],B.[AllowComments]) As AllowComments,   
  20.         B.[ParentBlogID],   
  21.         B.[AllowAnonymous],   
  22.         B.[Syndicated] AS BlogSyndicated,   
  23.         B.[PublicAS BlogPublic,   
  24.         (Select Count(*) FROM {databaseOwner}[{objectQualifier}Blog_Comments] WHERE EntryID = E.EntryID AND (Approved = 1)) As CommentCount   
  25.     INTO #topentries   
  26.     FROM   {databaseOwner}[{objectQualifier}Blog_Blogs] B INNER JOIN  
  27.         {databaseOwner}[{objectQualifier}Blog_Entries] E ON B.[BlogID] = E.[BlogID] INNER JOIN  
  28.         {databaseOwner}[{objectQualifier}Users] U ON B.[UserID] = U.[UserID]   
  29.     WHERE B.PortalID = @PortalID   
  30.     AND (E.[Published] = 1)   
  31.     AND (B.[Public] = 1)   
  32.     ORDER BY E.AddedDate DESC  
  33.        
  34. SELECT * FROM  
  35.     (SELECT TOP(@MaxEntries) *   
  36.     FROM #topentries   
  37.     ORDER BY AddedDate ASC) a   
  38.     ORDER BY AddedDate DESC  
  39. GO  
简单解析:仔细看看,这是一个很直观,很简单的策略算法,一开始按照所在页数取得数据条目,比如当前页CurrentPage是3,那么我们需要取出来的数据条目则为@MaxEntries * @CurrentPage = 3 × 10 = 30(假设传入的参数显示数目上限是10),然后根据添加时间顺序筛选出前10条记录,最后再倒序回来,如此这般则可以获取到第3页的数据记录,并按照添加时间更新排列的(最靠近现在的记录在最前边)。其实这一算法的所谓精髓就是后一截,也就是先顺序再倒序获取到符合需求的结果集。有兴趣者不妨琢磨琢磨,应该不难明白。
最后推荐这一算法的来源,那就是dnn核心blog的扩展模块BlogDisplay(下载地址),它可定制显示blog在别的页面显示,可算是一个不错的模块,如果你有这方面的需要不妨看看:
Configurable Blog list view for the DotNetNuke core Blog module
This posting is provided "AS IS" with no warranties, and confers no rights.
Popular tags: 分页算法, 模块开发
Previous Entry: DNN Skin旅程之琐碎杂想
Next Entry: 如何在DNN创建类IGoogle效果的模块

Comments

Was it good for you, too? Join the discussion »

leave a reply

About the author
Baldwin's Status
 Contact Me
Baldwin Sun
Senior Developer for dnn solution & founder of SunBlog module...
网站主页
dnnsun
最新评论
  1. Re: "暴力"解决DNN无法登陆的问题

    你好 有个问题 我改了登录界面后能登录 但是一点注册 就跳到了HOME页 这个怎么解决

    --zl24622

  2. Re: 你的dnn站点慢了么?

    需要你把旁边的checkbox勾选上再执行 :)

    --Baldwin

  3. Re: 你的dnn站点慢了么?

    为什么,我将你的代码copy到host>sql中去执行之后,报错呢,语句是不是有问题哦?

    --claire

  4. Re: 剖析DNN架构-开篇之作

    很好

    --vling83

  5. Re: SunBlog更新:增加3D Tag Clouds插件

    在以上评论已说明, SunBlog已经是一个成熟的商业模块,如果需要授权或下载请邮件联系我们, 感谢你的关注, 我们即将推出一个demo的站点(这周之内).

    --Baldwin

  6. Re: SunBlog更新:增加3D Tag Clouds插件

    这个没地方下载的吗,要怎么才能下载到,谢谢

    --Sun key

  7. Re: SunBlog更新:增加3D Tag Clouds插件

    已经电邮您了,请注意查收

    --sunny0315

  8. Re: 如何添加DNN模块的自定义权限

    你只要设置好该节点即可, 比如:DnnSun.SunBlogNuke.Business.InterfaceController, DnnSun.Modules.SunBlogNuke 其他的请再详细看看本文,我觉得说得蛮清楚的 :)

    --Baldwin

Blog搜索
Rss Feed
feedsky
抓虾
pageflakes
newsgator
哪吒
相册库
更多照片请查看相册库
我们的服务
  • DotNetNuke 咨询
  • Web设计及其模块开发
  • 免费建站
  • 电子商务
  • 开拓市场
我们致力于开发定制的web 2.0 ,所服务的客户主要包括小中型企业,社区俱乐部及其非盈利机构组织。我们将利用开源的DNN作为我们核心的系统机制,更多相关信息...
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。