mysql 中查出多条记录中的不同type值的pv字段的差值

来源:互联网 发布:c#怎么连接数据库 编辑:程序博客网 时间:2024/05/24 06:38

这里做个总结,当时时间比较急,用的方法比较笨:


需求:单击一个按钮 后台计算出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;















0 0