• 3640阅读
  • 77回复

关于帖子收藏排行Top50 [复制链接] [手机版]

上一主题 下一主题
离线为你守候
温馨家园,为你守候!

只看楼主 倒序阅读 使用道具 绿 楼主  发表于: 2016-03-25 17:13:28 星期五
—— 管理操作 •  zhangjingyu 从"建站历程◇调试升级"移动(2018-08-12) ——
同样是关于“收藏”的问题,在统计信息页的“收藏排行Top50”:
http://www.vtu425.com/sort.php?action=favor
“收藏次数”列的数据不对,好像很难更新或者不会更新,也就是说某个文件语句有问题。今天追踪了半天,尝试修改文件也没结果,问题怎么这么多?

sort.php文件里有一句:
  1. $_SORTDB = $element->hotFavorsort();

相关文件还有:lib/element.class.php和lib/elementupdate.class.php,这两个应该是最主要的文件,里面有关于hotFavor和newFavor的解释。

相关数据表:主题表threads里有favors;缓存表elements里的type字段有newfavor类型的,value字段的值,我感觉这个数据才是比较靠谱的。

收藏次数不对,版块链接也不对,形如:
http://www.vtu425.com/thread-htm-fid-.html
模板文件:
  1. <td><a href="thread.php?fid=$value[fid]" target="_blank">$value[forum]</a></td>

获取不到版块fid,所以链接里没有,自然不对。

改为:
  1. <td><a href="thread.php?fid={$value[addition][fid]}" target="_blank">$value[forum]</a></td>

搞定。不过,重要的问题还是没解决。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 置顶 (来自43楼) 发表于: 2018-08-12 06:55:02 星期日  点亮(0)
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2018-08-12 12:26) ——
第9行,从pw_threads表里查询当前主题的收藏数favors,这个没毛病;

第10行,从pw_elements表里按收藏数(value,不同表的字段名可能不一样)升序排列查询类型为收藏排行(hotfavor)的数据,筛选出value和eid。这个查询有什么意义呢?

第12行,如果当前主题的收藏数大于收藏排行top50主题的最小收藏数,将会继续执行13到20行代码;

第13行,删除收藏排行里收藏数最小的主题;(我感觉应该是只删除一条数据,第10行$rs = $this->db->get_one查询的意思应该是只要一个结果)

第20行,将当前主题的数据(14到19行)写入表,使当前主题成为收藏排行top50。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 置顶 (来自31楼) 发表于: 2018-08-10 18:43:07 星期五  点亮(0)
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2018-08-12 09:30) ——
搞定了,搞定了,困扰我几年的帖子收藏排行终于在2018年8月10日解决了!
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 置顶 (来自45楼) 发表于: 2018-08-12 07:43:31 星期日  点亮(0)
—— 管理操作 •  zhangjingyu 执行 帖内置顶 操作 (2018-08-12 07:48) ——
按原文件代码逻辑,举例情况应该如下:
假设主题a,收藏数为2,第一个成为收藏排行主题(成为第一个很容易);

主题b,点击收藏,收藏数变为1,比较条件不成立,后面的代码不会执行,也不是收藏排行主题,前面的代码也不会执行;

主题c,点击后收藏变为5(pw_elements 是缓存信息表,之前的数据可能会因为更新缓存等而被删除,所以没有数据也正常)。比较条件成立,会首先删除主题a的收藏排行数据行,然后将主题c添加为新的收藏排行;

此后,只有点击后收藏数大于表里收藏数(5)的主题才会更新数据表,删除之前的数据行(主题c),成为新的收藏排行主题(已经是收藏排行的主题,继续有新的收藏,+1,+2,+3没有任何问题)。

所以,能成为收藏排行主题的要求门槛会越来越高,需要的收藏数越来越大,并且只会有一条数据。

这根本就不是收藏排行top50,而是名副其实的收藏排行NO.1!
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 沙发  发表于: 2018-07-31 22:34:37 星期二  点亮(0)
  1. } elseif ($action == 'favor') {
  2.     $cachetime = pwFilemtime(D_P."data/bbscache/favor_sort.php");
  3.     if (!$per || !file_exists(D_P."data/bbscache/favor_sort.php") || ($timestamp-$cachetime>$per*3600)) {
  4.         $element = L::loadClass('element');
  5.         $element->setDefaultNum(50);
  6.         $_sort = array();
  7.         $_SORTDB = $element->hotFavorsort();
  8.         pwCache::writeover(D_P.'data/bbscache/favor_sort.php',"<?php\r\n\$_FAVORS=".pw_var_export($_SORTDB).";\r\n?>");
  9.     } else {
  10.         include pwCache::getPath(D_P."data/bbscache/favor_sort.php");
  11.         $_SORTDB = $_FAVORS;
  12.         unset($_FAVORS);
  13.     }

备份一段代码,关于帖子收藏排行sort.php
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 板凳  发表于: 2018-07-31 22:54:09 星期二  点亮(0)
lib/element.class.php
  1. /**
  2.      * 获取热门收藏
  3.      *
  4.      * @param string $type     :无用参数
  5.      * @param string $fid
  6.      * @param int $num
  7.      * @return array
  8.      */
  9.     function hotFavorsort($type=false,$fid='',$num=0){
  10.         global $forum;
  11.         $num = intval($num) ? intval($num) : $this->defaultnum;
  12.         $sqladd = '';
  13.         $favors = array();
  14.         !$fid && $fid = getCommonFid();
  15.         //* isset($forum) || include pwCache::getPath(D_P.'data/bbscache/forum_cache.php');
  16.         isset($forum) || extract(pwCache::getData(D_P.'data/bbscache/forum_cache.php', false));
  17.         if ($this->ifpwcache & 1024) {
  18.             $fid && $sqladd .= " AND e.mark IN ($fid) ";
  19.             $query = $this->db->query("SELECT t.tid,t.fid,t.author,t.authorid,t.subject,t.postdate,t.hits,t.replies,t.favors,t.lastpost FROM pw_elements e LEFT JOIN pw_threads t ON e.id=t.tid WHERE e.type='hotfavor' $sqladd ORDER BY e.value DESC ".S::sqlLimit($num));
  20.             while ($rt = $this->db->fetch_array($query)) {
  21.                 $favor = array();
  22.                 $favor['url']     = 'read.php?tid='.$rt['tid'];
  23.                 $favor['title'] = $rt['subject'];
  24.                 $favor['value'] = $rt['favors'];
  25.                 $favor['posttime'] = get_date($rt['postdate']);
  26.                 $favor['forum'] = $forum[$rt['fid']]['name'];
  27.                 $favor['image']    = '';
  28.                 $favor['addition'] = $rt;
  29.                 $favors[] = $favor;
  30.             }
  31.         } else {
  32.             $info = $this->singLeton(true,$num);
  33.             $favors = $info->gethotfavor($fid,$info->cachenum);
  34.         }
  35.         return $favors;
  36.     }
  37.     /**
  38.      * 获取最新收藏
  39.      *
  40.      * @param string $type     :无用参数
  41.      * @param string $fid
  42.      * @param int $num
  43.      * @return array
  44.      */
  45.     function newFavorsort($type=false,$fid='',$num=0){
  46.         global $forum;
  47.         $num = intval($num) ? intval($num) : $this->defaultnum;
  48.         $sqladd = '';
  49.         $favors = array();
  50.         !$fid && $fid = getCommonFid();
  51.         //* isset($forum) || include pwCache::getPath(D_P.'data/bbscache/forum_cache.php');
  52.         isset($forum) || extract(pwCache::getData(D_P.'data/bbscache/forum_cache.php', false));
  53.         $fid && $sqladd .= " AND e.mark IN ($fid) ";
  54.         $query = $this->db->query("SELECT t.tid,t.fid,t.author,t.authorid,t.subject,t.hits,t.replies,t.postdate,t.hits,t.replies,t.favors,t.lastpost,e.addition,e.time,t.replies,t.hits FROM pw_elements e LEFT JOIN pw_threads t ON e.id=t.tid WHERE e.type='newfavor' $sqladd AND t.ifshield != 1 AND t.locked != 2 ORDER BY e.value DESC ".S::sqlLimit($num));
  55.         while ($rt = $this->db->fetch_array($query)) {
  56.             $favor = array();
  57.             $favor['url']     = 'read.php?tid='.$rt['tid'];
  58.             $favor['title'] = $rt['subject'];
  59.             $favor['value'] = $rt['favors'];
  60.             $favor['posttime'] = $rt['postdate'];
  61.             $favor['favortime'] = get_date($rt['time']);
  62.             $favor['forum'] = $forum[$rt['fid']]['name'];
  63.             list($favor['favorid'],$favor['favorer']) = explode('|',$rt['addition']);
  64.             unset($rt['addition']);
  65.             $favor['image']    = '';
  66.             $favor['replies']    = $rt['replies'];
  67.             $favor['hits']    = $rt['hits'];
  68.             $favor['addition'] = $rt;
  69.             $favors[] = $favor;
  70.         }
  71.         return $favors;
  72.     }
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 地板  发表于: 2018-07-31 23:05:38 星期二  点亮(0)
SELECT * FROM `pw_elements` where type='hotfavor'
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 4楼 发表于: 2018-07-31 23:05:59 星期二  点亮(0)
MySQL 返回的查询结果为空(即零行)。 (查询花费 0.0005 秒)
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 5楼 发表于: 2018-08-01 22:32:32 星期三  点亮(0)
SELECT * FROM `pw_elements` WHERE type='hotfavor' ORDER BY value DESC
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 6楼 发表于: 2018-08-01 22:37:05 星期三  点亮(0)
后台pw缓存库的热门收藏不能更新缓存,否则所有的热门收藏都会被删除,只有新收藏的主题才会被写入缓存表(pw_elements).
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!