• 3643阅读
  • 77回复

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

上一主题 下一主题
离线zhangjingyu

只看该作者 37楼 发表于: 2018-08-10 23:00:45 星期五  点亮(0)
再见的表情找不到了吗?真的晕了吗?
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

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

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

只看该作者 39楼 发表于: 2018-08-10 23:03:45 星期五  点亮(0)
明天我说说自己理解的代码意思,从第5页开始哈。
不扯了,睡觉,真的困了,好几天没睡午觉了。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 40楼 发表于: 2018-08-11 22:43:09 星期六  点亮(0)
好吧,继续明天说,睡觉。今天又吓到我了。
http://www.vtu425.com/read-htm-tid-3490.html
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 41楼 发表于: 2018-08-12 05:36:30 星期日  点亮(0)
这几天忙论坛,睡得晚,醒得早,又没有睡午觉——心里有事儿啊,说不定忙完这几天,得好好的睡上它一上午。

昨天又修改论坛教程了,把论坛管理版块的几个主题移动到建站历程版块,电脑又出了点儿小问题,所以这里没有更新。好了,今天开始。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 42楼 发表于: 2018-08-12 05:57:21 星期日  点亮(0)
26楼代码再贴下:
lib/elementupdate.class.php
  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'] > $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.     }

简单说下我的理解:
第5行,从FROM pw_elements里查询eid(就是一个序号,类型为自增),查询条件为type字段为收藏排行(hotfavor),mark字段为当前版块fid,id字段为当前主题的tid。说白了,就是查询当前主题是不是在收藏排行里;

第6行,如果为真,也就是当前主题已经在收藏排行里;

第7行,更新对应eid行的收藏数为原收藏数+1,也就是对于已经是收藏排行的主题,每当被收藏一次,在这个表里收藏数就会增加1;

第8行,否则,也就是当前主题不在收藏排行top50里。这种情况下的代码,从第9行开始一直到22行。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 44楼 发表于: 2018-08-12 07:06:43 星期日  点亮(0)
先不说第12行的比较意义何在,单说如果条件成立,第13行的删除数据行就很可怕!
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

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

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