帝国cms按照会员投稿数量进行排名的实现方式的一些思考

时间:2017-03-18 15:21:07

分类:帝国教程

帝国cms自身是不带会员的排名功能的,我们在输出会员列表时可以用mysql查询语句来根据查询字段来实现排序,例如下面这样,按照会员的userfen字段进行排序输出,但这样只能按照排序输出会员列表,却无法实际取出会员的十几排名,例如我们有十万名会员,该会员排在93214名,我们就无法得知了。

折叠PHP 代码
  1. $sql=$empire->query("select * from {$dbtbpre}enewsmember order by userfen desc limit 10");  
  2. while($r=$empire->fetch($sql))        //循环获取查询记录  
  3. {  
  4.         echo"会员名字:".$r['username']."<br>";  
  5. }  

后来cms大学小编想到了下面的方法,利用计划任务,或者其他类似计划任务的方式在每天分时段执行,脚本的功能是计算出会员的投稿数量,存储infonum字段,而后按照infonum字段通过循环计算出排名,并存储pxnum字段,以此来实现帝国cms会员按照投稿数量获得实际的静态排名,然后在其他页面加以利用。

代码如下,此处未考虑大数据量下可能导致超时的问题,只是一个引子。具体的优化方式可以参考帝国cms刷新文章的分组方式:

折叠PHP 代码
  1. $sql=$empire->query("select userid from {$dbtbpre}enewsmemberadd order by infonum,lasttime desc");        //查询会员表按照投稿数量、最后登录时间排序  
  2. $i=0;  
  3. while($r=$empire->fetch($sql))        //循环获取查询记录  
  4. {  
  5.         $i++;  
  6.         $empire->query("update {$dbtbpre}enewsmemberadd set pxnum='$i' where userid='$r[userid]'");  
  7. }  

这样我们就可以随时取出pxnum这个排名字段值来显示了。这里可能有人会觉得这个排名并非实时排名,不够理想。如果数据量非常小,完全可以让这个脚本1分钟执行一次或者更短间隔,这样就能做到更趋近实时了,而如果数据量非常大,动辄数十万会员,这个数字是否真的实时显示也就没有那么重要了,况且如此大的数据量完全可以使用缓存来存储计算了,而不是实时读取再存库这样耗费资源的方式。

帝国cms按照会员投稿数量进行排名的实现方式的一些思考.jpg

 

相关文章

相关推荐

为帝国CMS用户提供动力

Copyright © 2016 CmsDX.com All Rights Reserved.