åè¨
å½ä¸ï¼åªè¦æ¯ä¸ä¸ªåå ·è§æ¨¡çå 容åºç¨é½å ·å¤ä¸ªæ§åæ¨èç³»ç»ãæ¯å¦è´ç©ç±»çä¼ææ¨èåå模åï¼æç´¢æ¡ä¸æ个æ§åçæç´¢å ³é®è¯æè¯æ¡è¡¥å ¨è¯ï¼ç¤¾äº¤ç±»çæå主æ¨èï¼è§é¢ææç« æ¨èççãè¿äºåè½é¤äºè¦æåºå¤§çæ°æ®éï¼è¿è¦æå¥å ¨çæ°æ®åå¨ä»åºå»ºè®¾æ¹æ¡ï¼ä»¥ååé¢å¯¹æ°æ®çæ¸ æ´ï¼æåºï¼è®ç»åçæ¨è模åç®æ³ã
ä½æ¯ï¼å¯¹äºå°å ¬å¸æè 说æ¯å°é¡¹ç®ï¼å¨æ³æ³è¿æªçæ£è½å°å°±è®¾è®¡å¤§æ°æ®åå¨ï¼æ¨èç®æ³åä¸ç³»å大åæ¶æçæ¹æ¡ï¼æ¾ç¶æ¯ä¸ç¬¦åä¸å¡å产åå¼å±çæ£å¸¸è§å¾çãææ³é£äºå¤§åæ©æå¼ååºè¯¥ä¹æ²¡æè¿ä¹æççææ¯ç»æï¼é½æ¯ä¸æè¿ä»£æè æ¨åéæ¥ä¸æ¥æ¥èµ°è¿æ¥çã
é£ä¹ï¼å¨å°é¡¹ç®æ©æå®æäºæå ³äºæ¨èåè½çé£è¦å¦ä½è§£å³å¢ï¼ å¦ä½åå°ä¸ä¸æ¬¡è¿ä»£å¨ä¸éæçåºç¡ä¸æ·»å ååè¿æ»¤æ¨èï¼ ä¸é¢å°±ä»è§é¢æ¨èåç¨æ·æ¨è两个åè½å±å¼ï¼ç¨PHPåMySQLè¿è¡ä»£ç å®ç°ã
è§é¢æ¨è
è¿é主è¦éè¿ä¸ä¸ªå 容ç度å¼è¿è¡æåºæ¨èï¼ç度ç±å 容质éååå¸æ¶é´å·®å³å®ï¼æ¶å·®è¶é¿ï¼ç度è¶ä½ï¼å 容质éè¶é«ç度è¶é«ãèå 容质éç±è§é¢ç¹èµæ°ï¼æ¶èæ°åè¯è®ºæ°å¤å¸¦æéå³å®ï¼æ»ä½å°±æ¯åä½æ¶é´å ç¹èµï¼æ¶èï¼è¯è®ºè¶é«ï¼ç度æåï¼è§é¢å°±è¶å¾åé ãç¸å¯¹çå°±æ¯åå¸æ¶é´è¶ä¹ ï¼ç度就ä¼éæ¥éä½ï¼è§é¢è¶å¾åé ã
å¦å¤æ们è¿è¦è®¾è®¡ä¸¤ä¸ªåæ°ç¨äºæå¨è°èè§é¢çç度ï¼æé«å°±åªéè¦å¢å å 容质éï¼æ以é¢å¤å ä¸ä¸ªæ°å¯ä»¥è¯´æ¯åå§å¼ãéä½å¯ä»¥å¯¹æ¶é´å·®æ·»å ä¸ä¸ªææ°ï¼ä¹å°±æ¯æ¶é´å·®ç次æ¹ï¼å¯ä»¥ç解æ¯éåï¼ä¹å°±æ¯éçæ¶é´æé¿ï¼éåå¢å åç度æåéä½ã
1. å ¬å¼
1.1. âHâï¼è§é¢ç度å¼
1.2. âWâï¼è§é¢è´¨éï¼è´¨éå¼èªå®(ç¹èµæ°*æéï¼æ¶èæ°*æéä¹åï¼æè ç¹èµç(ç¹èµé/é 读é)ï¼æ¶èç(æ¶èé/é 读é)ä¹å)çã
1.3. âIâï¼åå§å¼ï¼å¯ä»¥æå¨è°èç度æè ç¨äºåæç¨æ·è´¦å·çæéãæ¯å¦ç³»ç»å·²ç»æäºæé¿ä½ç³»ï¼è´¦å·åè²è§ååºæ¬å®åäºï¼ç¨äºå®æ¶è®¡ç®è´¦å·çæéåé çæµéæ± ï¼æéæåï¼ååé¢åå¸çè§é¢æ¨èå度大ã
1.4. âTâï¼æ¶é´å·®ï¼ç±å½åæ¶é´ - åå¸æ¶é´äº§çï¼å ä¸çåå æ¯é²æ¢æ¶é´å·®ä¸º0(åæ¯ä¸ºé¶)ï¼ä¸è¿æå®¡æ ¸æºå¶ä¸ï¼è¿ç§æ åµå¹¶ä¸åå¨ã
1.5. âG"ï¼ç度衰åéåï¼è¿ä¸ªä¹æ¯ç¨äºæå¨è°èç度设置çæ§å¶åæ°ãä¸è¿åæå¦ææ·»å äºä¸¾æ¥æè æºè½å¤å®¡çç¯èï¼åéç诸å¦ç¹èµåè´¦æ·æéè¯ä¼°å¤±æ§ç度é£åçæ åµä¸ï¼å¯¹è§é¢è¿è§æä¸è¯è¡¨ç°æ临æ¶æ åµè¿è¡åå°æ¨èãé»è®¤å¼æ好æ¯1ï¼è¿ç§æ åµå°±æ¯å¨åçè´¨éä¸æ°åå¸çè¶å¾åã
2. 表ç»æ
CREATE TABLE `hhyp_short_video` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`hsvn` varchar(255) DEFAULT '' COMMENT 'çè§é¢ç¼å·',
`type` tinyint(1) DEFAULT '0' COMMENT 'ç±»åï¼1. è§é¢ 2.å¾æ',
`user_id` int(11) DEFAULT '0',
`video_url` varchar(255) DEFAULT '',
`img_url` json DEFAULT NULL,
`content` text COMMENT 'å
容',
`market_goods_id` int(11) DEFAULT '0',
`address_id` int(11) DEFAULT '0' COMMENT 'å°åID',
`lat` decimal(4,0) DEFAULT '0' COMMENT '纬度',
`lng` decimal(4,0) DEFAULT '0' COMMENT 'ç»åº¦',
`ip` varchar(100) CHARACTER SET utf8 DEFAULT '' COMMENT 'IP',
`channel` tinyint(1) DEFAULT '0' COMMENT 'æ¸ é',
`read_count` int(11) DEFAULT '0' COMMENT 'æµè§æ°',
`like_count` int(11) DEFAULT '0' COMMENT 'ç¹èµæ°',
`collect_count` int(11) DEFAULT '0' COMMENT 'æ¶èæ°',
`comment_count` int(11) DEFAULT '0' COMMENT 'è¯è®ºæ°',
`share_count` int(11) DEFAULT '0' COMMENT 'å享æ°',
`is_top` tinyint(1) DEFAULT '0' COMMENT 'æ¯å¦ç½®é¡¶ï¼0.å¦ 1.æ¯',
`status` int(11) DEFAULT '0' COMMENT '0. å®¡æ ¸ä¸ 10. æ¨è 20. ä¸æ¶',
`hot_int` int(11) DEFAULT '1' COMMENT 'ç度åå§å¼',
`gravity` int(11) DEFAULT '1' COMMENT 'ç度éåè¡°åå¼',
`audit_time` int(11) DEFAULT '0' COMMENT 'å®¡æ ¸æ¶é´',
`remark` text,
`create_time` int(11) DEFAULT '0' COMMENT 'å建æ¶é´',
`delete_time` int(11) DEFAULT '0',
`update_time` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8mb4;
3. 代ç
public static function getList($map, $page = 1, $size = 20)
{
// æ°æ®ææ æéé
ç½®
$wcfg = [
'like_weight' => 4,
'collect_weight' => 3,
'comment_weight' => 1
];
$timeUnit = 3600; // åä½å°æ¶
$where[] = ['delete_time', '=', 0];
$map = array_merge($where, $map);
// åä½å°æ¶å
ï¼ç¹èµ/æ¶è/è¯è®ºè¶å¤ç度è¶é«ï¼åå¸è¶ä¹
ç度è¶ä½
$alog = "(like_count*%s+collect_count*%s+comment_count*%s+hot_int)/pow((UNIX_TIMESTAMP(NOW())-create_time)/%s, gravity)";
$hotIndex = sprintf($alog, $wcfg['like_weight'], $wcfg['collect_weight'], $wcfg['comment_weight'], $timeUnit);
$field = ["id, hsvn,type,user_id,video_url,img_url,content,market_goods_id,
like_count,collect_count,address_id,comment_count,share_count,create_time, $hotIndex as hot_index"];
$list = self::field($field)
->json(['img_url'], true)
->with([
'user' => function ($query) {
$query->withField('id, nickname, mobile, avatar');
},
'marketGoods' => function ($query) {
$query->withField('id, content,freight,user_id');
},
'address' => function ($query) {
$query->withField('id, mername');
}
])
->where($map)
->page($page, $size)
->order("hot_index desc")
->select();
return $list;
}
ç¨æ·æ¨è
æ¨èç¨æ·ï¼å¤§é¨åæ¯æ¾å¨Appéç个人ä¸å¿æå ´è¶£ç¨æ·æ¨¡åãæçæ¯ç»ç¨æ·æ¨èææçé讯å½å¥½åï¼æçæ¯æ ¹æ®è¡ä¸ºæ°æ®ï¼éè¿ç»ç¨æ·ææ ç¾ï¼åæ¨èä¸èªå·±æ ç¾ç¸ä¼¼çç¨æ·ççæ¹å¼ãèæè¿éçç¨æ·æ¨èæ¯æ¾å¨åå¸è§é¢çç¨æ·é¢æ¿éï¼æ¬æ¥ææ³éè¿ååè¿æ»¤çç¸ä¼¼ç¨æ·æ¥åï¼ç±äºæ°æ®å¤ªæéï¼å ä¹æ们ä¸å¡æ¬èº«å°±ä¸è½æ¥çç¨æ·å ³æ³¨å表åç²ä¸å表ï¼æ以就ææ¶ç¨äºä¸ä¸ªæä¸çæ¹æ³ï¼ç»ç¨æ·æ¨èåä½è å ³æ³¨çå ³æ³¨ã
æ ¹æ®å½åé¢æ¿ç¨æ·å ³æ³¨çç¨æ·éæåºç²ä¸æ°æå¤çåå个ï¼ç¶ååä»è¿å个éåå«æåºä»ä»¬å ³æ³¨ç¨æ·éç²ä¸æå¤çååï¼æåå并å»éï¼ä¹å°±æ¯ç»èªå·±æ¨èæå¼ç¨æ·å ³æ³¨çå ³æ³¨éç²ä¸æå¤çé£æ¹äººã
1. 表ç»æ
CREATE TABLE `hhyp_user_attention` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT '0' COMMENT 'ç¨æ·id',
`comcemed_user_id` int(11) NOT NULL DEFAULT '0' COMMENT 'å
³æ³¨çç¨æ·id',
`create_time` int(11) DEFAULT '0' COMMENT 'å建æ¶é´',
`status` smallint(3) NOT NULL DEFAULT '0' COMMENT 'å
³æ³¨ç¶æ 0æªå
³æ³¨ 1å·²å
³æ³¨',
`update_time` int(11) DEFAULT '0' COMMENT 'æ´æ°æ¶é´',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=352 DEFAULT CHARSET=utf8mb4;
2. 代ç
éè¿æ¥è¯¢åæ¥è¯¢éæå®ç¨æ·éç²ä¸æå¤çåå人(åç»æåº)ï¼ç¶åéå½å¾åæ¥è¯¢å°±å½¢æå ³æ³¨é¾æ¡ï¼æååå并æ¥è¯¢ç»æãå ¶å®è¿ä¸ªä¹å¾çæ°æ®çï¼å½æçæ£æè¿ä¸ªæ¹æ³æ¾ä¸å»çæ¶åï¼ä¼åç°å¾å¤é¢æ¿é没æç¨æ·æ¨èçæ°æ®ï¼å 为å¾å¤ç¨æ·æ ¹æ®å°±æ²¡å ³æ³¨å 个人ãæ以éè¿æ·±åº¦å¦ä¹ æè ååè¿æ»¤åç¨æ·æ¨èå¯è½è¦çå¾ ä¸æ®µæ¶é´ï¼çç¨æ·è¡ä¸ºæ°æ®äº§çå·®ä¸å¤çæ¶åï¼æååºä¸ä¸ååè¿æ»¤çç¨æ·ç¸ä¼¼åº¦æ¨èå§ã
// å
³æ³¨é¾å表
public static function grandadList($userIds = [], &$allList = [], &$level = 1)
{
$field = ["comcemed_user_id, count(*) as fans_count, {$level} as level"];
$list = self::field($field)
->where('comcemed_user_id', 'in', function ($query) use ($userIds) {
$query->table('hhyp_user_attention')
->where('user_id', 'in', $userIds)
->where('status', '=', 1)
->field('comcemed_user_id');
})
->where('status', '=', 1)
->group('comcemed_user_id')
->order('fans_count desc')
->limit(10)
->select()
->toArray();
if ($list && $level < 4) {
$level++;
$comcemedUserIds = array_column($list, 'comcemed_user_id');
$list = self::grandadList($comcemedUserIds, $list, $level);
}
$list = array_merge($allList, $list);
return $list;
}