这里做个总结,当时时间比较急,用的方法比较笨:
需求:单击一个按钮 后台计算出type=1每小时的pv量 减去type=2 每小时的pv量
返回每小时的pv差。(数组格式)eg:0:{hours=>0,pv=>23} 1:{hours=>1,pv=30} 2:{hours=>2,pv=>10}....
!!!每天24小时 这里数据只是部分(测试) daytime 也只有单天。
当时为了赶紧下班,也没多想,用了本方法,先查出type=1 当天每小时的pv量组合成一个数组,在查出type=2当天
每小时的pv量组合成一个数组 然后对2个数组进行处理 (这里处理数组就不多说了 foreach)
今天想了下 用mysql查询语句可以简单点,然后做了测试,见下面
左连接: (自连接)
SELECT a.hours,a.id ,a.pv,b.hours,b.id,b.pv ,(a.pv-b.pv) as pvc from user as a
LEFT JOIN user as b on a.hours=b.hours AND b.type=2
where a.type=1 and a.daytime=20160306 ORDER BY a.hours ASC
查询结果见下图左1
这里的pvc 就是 2个相减之差了。这里就可以了。
2.自连接:
SELECT a.hours,a.id,a.pv,b.hours,b.id,b.pv,(a.pv-b.pv) as pvc FROM `user` a, `user` b
where a.type=1 and b.type=2 and a.hours=b.hours and a.daytime=20160306 ORDER BY a.hours ASC
这个用的自连接查出的结果,我特意和前面对比了下 ,type=1有 5点时候的数据
type=2没有5点的数据,一个查出来了 一个没查出来,这是为了防止2个类型数据不一致的
情况,当然 可以按需所取,这里只是说明一下 好了,这样的方法就稍微简单点。
好了,附上sql语句 :希望可以帮到其他人
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` int(11) DEFAULT NULL,
`pv` int(11) DEFAULT NULL,
`hours` int(11) DEFAULT NULL,
`daytime` int(11) DEFAULT '20160306',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;