• 4799阅读
  • 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

只看该作者 77楼 发表于: 2020-08-09 23:16:42 星期日  点亮(0)
今天才9号,而登录页左侧图片添加的链接却是发生在10号的事件(本主题标题),说明明天还有一件大事是值得记录的。查看月份文档,主题tid是812,对应主题是“2011年8月10:再见,地摊网!”。
09#3497-29405;2018年8月10日:解决了困扰我多年的收藏排行问题
10#812
11#813;玉华在某社区首席版主被撤与我在地难网管理员被撤后张哥的留言
原来8月10号的事件还不少呢,这3个都是。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 76楼 发表于: 2020-08-09 22:37:04 星期日  点亮(0)
祝贺,祝贺!从头到尾又看了一遍,基本看明白了,毕竟记录还算详细。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 75楼 发表于: 2019-02-16 22:09:44 星期六  点亮(0)
最重要的逻辑问题在于第12行的比较,就像43楼说的——这根本就是逻辑错误!意义何在?

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

改为“ if ($rt['favors'] > 0) {”,也就是只要当前主题的收藏数大于0,那就写入缓存数据表,成为收藏排行top50(第18行指定类型为收藏排行/热门收藏)。所以,第10行的查询和第13行的删除就没有意义了,双斜线注释,不执行就可以了。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 74楼 发表于: 2019-02-16 21:48:29 星期六  点亮(0)
回复43楼 zhangjingyu 的帖子
zhangjingyu第9行,从pw_threads表里查询当前主题的收藏数favors,这个没毛病;

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

第12行,如果当前主题的收藏数大于收藏排 .. (2018-08-12 06:55)
对照42楼的代码及43楼我的理解看修改,就能明白了。
  1.     function hotfavorUpdate($tid, $fid) {
  2.         if (!($this->ifcache & 1024) || !$tid || !$fid) {
  3.             return false;
  4.         }
  5.         $eid = $this->db->get_value("SELECT eid FROM pw_elements WHERE type='hotfavor' AND mark=" . S::sqlEscape($fid) . " AND id=" . S::sqlEscape($tid));
  6.         if ($eid) {
  7.             $this->db->update("UPDATE pw_elements SET value=value+1 WHERE eid=" . S::sqlEscape($eid));
  8.         } else {
  9.             $rt = $this->db->get_one("SELECT favors FROM pw_threads WHERE tid=" . S::sqlEscape($tid));
  10.             //$rs = $this->db->get_one("SELECT value,eid FROM pw_elements WHERE type='hotfavor' ORDER BY value ASC");
  11.             if ($rt['favors'] > 0) {//$rs['value']
  12.                 //$this->db->update("DELETE FROM pw_elements WHERE eid=" . S::sqlEscape($rs['eid']));
  13.                 $favors = array(
  14.                     'id' => $tid,
  15.                     'mark' => $fid,
  16.                     'value' => $rt['favors'],
  17.                     'type' => 'hotfavor'
  18.                 );
  19.                 $this->db->update("REPLACE INTO pw_elements SET" . S::sqlSingle($favors, false));
  20.             }
  21.         }
  22.         return true;
  23.     }
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 73楼 发表于: 2019-02-16 21:41:20 星期六  点亮(0)
回复42楼 zhangjingyu 的帖子
zhangjingyu 26楼代码再贴下:
lib/elementupdate.class.php
function hotfavorUpdate($tid, $fid) {
        if (!($this->ifcache & 1024) || !$tid || !$fid) {
             .. (2018-08-12 05:57)   
修改后的代码帖下,都不记得是怎么改的了。没想到这么重要的修改竟然没有注释。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 72楼 发表于: 2018-09-12 21:52:49 星期三  点亮(0)
把“文章”改为“标题”:(主题标题称为“文章”)总感觉怪怪的,有些别扭。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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