首页| 版块| 我的| 发帖| 消息
主题:关于帖子收藏排行Top50
zhangjingyu 
26楼代码再贴下:
lib/elementupdate.class.php
function hotfavorUpdate($tid, $fid) {
        if (!($this->ifcache & 1024) || !$tid || !$fid) {
            return false;
        }
        $eid = $this->db->get_value("SELECT eid FROM pw_elements WHERE type='hotfavor' AND mark=" . S::sqlEscape($fid) . " AND id=" . S::sqlEscape($tid));
        if ($eid) {
            $this->db->update("UPDATE pw_elements SET value=value+1 WHERE eid=" . S::sqlEscape($eid));
        } else {
            $rt = $this->db->get_one("SELECT favors FROM pw_threads WHERE tid=" . S::sqlEscape($tid));
            $rs = $this->db->get_one("SELECT value,eid FROM pw_elements WHERE type='hotfavor' ORDER BY value ASC");

            if ($rt['favors'] > $rs['value']) {
                $this->db->update("DELETE FROM pw_elements WHERE eid=" . S::sqlEscape($rs['eid']));
                $favors = array(
                    'id' => $tid,
                    'mark' => $fid,
                    'value' => $rt['favors'],
                    'type' => 'hotfavor'
                );
                $this->db->update("REPLACE INTO pw_elements SET" . S::sqlSingle($favors, false));
            }
        }
        return true;
    }
简单说下我的理解:
第5行,从FROM pw_elements里查询eid(就是一个序号,类型为自增),查询条件为type字段为收藏排行(hotfavor),mark字段为当前版块fid,id字段为当前主题的tid。说白了,就是查询当前主题是不是在收藏排行里;

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

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

第8行,否则,也就是当前主题不在收藏排行top50里。这种情况下的代码,从第9行开始一直到22行。
zhangjingyu回帖于2018-08-12 05:57[查看电脑版]
下一页 (1/2)
下一楼»:第9行,从pw_threads表里查询当前主题的收藏数favors,这个没毛病;

第10行,从pw_elem ..
«上一楼:这几天忙论坛,睡得晚,醒得早,又没有睡午觉——心里有事儿啊,说不定忙完这几天,得好好的睡上 ..

查看全部回帖(77)
«返回主帖