直接上sql语句select * from (select *,count(user_id) as ct,from_unixtime(last_update, '%Y-%m-%d %H:%i:%S') from say_bigdata where user_id !=14807 and user_id !=0 and
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d') and
CONCAT(type,CONCAT('_',target_id)) in (select CONCAT(type,CONCAT('_',target_id)) from say_bigdata where user_id=14807 and
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d')) GROUP BY user_id limit 5) s ORDER BY ct desc;
我实在是没有什么高深的sql语句的经验,求大神详细解析一下这段语句到底是怎么个意思。如果可以的话,我想再统计这里去用户3个月内的100条数据应该怎么改。
也是接的活,现在的逻辑如下:首先获取单天或者180天内有浏览记录的用户 (获得user_id)
然后用查找这些用户的浏览记录,取前一个月的 (获得浏览记录列表)
然后分析这些浏览记录中的浏览用户 (再次获得user_id)
最后最叠加 例如user_id 1 访问了 page 1 、 2 、3 、4 、5 、6 、7
例如user_id 2 访问了 page 1 、 2 、3 、4 、5
例如user_id 3 访问了 page 1 、 2 、3
然后叠加
1跟2匹配了5次
1跟3匹配了3次
2跟3匹配了3次最后是我取这些数据的3个月内的前100条数据
希望大神能给予指点!!!拜谢!!!!
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d') and
CONCAT(type,CONCAT('_',target_id)) in (select CONCAT(type,CONCAT('_',target_id)) from say_bigdata where user_id=14807 and
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d')) GROUP BY user_id limit 5) s ORDER BY ct desc;
我实在是没有什么高深的sql语句的经验,求大神详细解析一下这段语句到底是怎么个意思。如果可以的话,我想再统计这里去用户3个月内的100条数据应该怎么改。
也是接的活,现在的逻辑如下:首先获取单天或者180天内有浏览记录的用户 (获得user_id)
然后用查找这些用户的浏览记录,取前一个月的 (获得浏览记录列表)
然后分析这些浏览记录中的浏览用户 (再次获得user_id)
最后最叠加 例如user_id 1 访问了 page 1 、 2 、3 、4 、5 、6 、7
例如user_id 2 访问了 page 1 、 2 、3 、4 、5
例如user_id 3 访问了 page 1 、 2 、3
然后叠加
1跟2匹配了5次
1跟3匹配了3次
2跟3匹配了3次最后是我取这些数据的3个月内的前100条数据
希望大神能给予指点!!!拜谢!!!!
FROM (
# 查询出访问和user_id=14807相同target_id的非14807的用户,只查询出前五个
SELECT
*,
count(user_id) AS ct,
from_unixtime(last_update, '%Y-%m-%d %H:%i:%S')
FROM say_bigdata
WHERE user_id != 14807 AND user_id != 0 AND
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d')
AND CONCAT(type, CONCAT('_', target_id)) IN
(
# 这个是指查出user_id为14807这三个月的访问了那些target_id
SELECT CONCAT(type, CONCAT('_', target_id))
FROM say_bigdata
WHERE user_id = 14807 AND
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <=
from_unixtime(last_update, '%Y-%m-%d')
)
GROUP BY user_id
LIMIT 5
) s
ORDER BY ct DESC; #按访问叠加次数倒序排序。最后是我取这些数据的3个月内的前100条数据 的话,把5改成100就好了。(因为没数据,不能保证百分百正确,而且,mysql写的我感觉也有点问题)。