PHP+MySQL对当月,当周,当日数据统计,并将相应字段分组排序

1 篇文章 0 订阅
在我们的开发过程中,往往会遇到对会员或者商家进行收益排行,分别按照当月,当周或者当日进行排序;当然,你可以先把用到的数据获取到,然后再根据你想要的功能对数据进行相应处理。下面,我要给大家演示的是直接对MySQL进行操作,利用MySQL的一些统计函数,很方便的进行数据的筛选。

首先,给大家介绍的是使用php获取当日、当周、当月以及昨日等时间戳;
  • 获取今日开始时间戳和结束时间戳
	$today_start=mktime(0,0,0,date('m'),date('d'),date('Y'));
	$today_end=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  • 获取昨日起始时间戳和结束时间戳
	$yesterday_start=mktime(0,0,0,date('m'),date('d')-1,date('Y'));
	$yesterday_end=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
  • 获取上周起始时间戳和结束时间戳
	$lastweek_start=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
	$lastweek_end=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
  • 获取本周周起始时间戳和结束时间戳
	$thisweek_start=mktime(0,0,0,date('m'),date('d')-date('w')+1,date('Y'));
	$thisweek_end=mktime(23,59,59,date('m'),date('d')-date('w')+7,date('Y'));
  • 获取本月起始时间戳和结束时间戳
	$thismonth_start=mktime(0,0,0,date('m'),1,date('Y'));
	$thismonth_end=mktime(23,59,59,date('m'),date('t'),date('Y'));
 下面是MySQL获取当天,当周,当月等数据一些基本操作;
  • 查询当天的数据
	SELECT * FROM 表名 WHERE TO_DAYS(时间字段)=TO_DAYS(NOW());
  • 查询昨天的数据
	SELECT * FROM 表名 WHERE TO_DAYS(NOW())-TO_DAYS(时间字段)=1;
  • 查询当周的数据
	SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段,'%Y-%m-%d'))=YEARWEEK(NOW());
  • 查询上周的数据
	SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段,'%Y-%m-%d'))=YEARWEEK(NOW())-1;
  • 查询当月的数据
	SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段,'%Y%m')=DATE_FORMAT(CURDATE(),'%Y%m');
  • 查询上月的数据
	SELECT * FROM 表名 WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'),DATE_FORMAT(时间字段,'%Y%m'))=1;
  • 查询当年的数据
	SELECT * FROM 表名 WHERE YEAR(时间字段) =YEAR(NOW());
  • 查询最近7天的数据
	SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY)<=DATE(时间字段);

下面我们将使用上述的一些查询操作,对下图所示的收益排行功能进行数据处理;
这里写图片描述

  • 数据格式如上图,下面直接上代码:
switch ($style) {

			case 'total'://总榜
				// $total = M('income_log')->group('userid')->sum($field);
				$total = M('')->query("SELECT userid,SUM($field) as sum FROM income_log GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10");
				break;
			case 'day'://日榜
				$total = M('')->query("SELECT userid,SUM($field) as sum FROM income_log where TO_DAYS(date)=TO_DAYS(NOW()) GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10"); 
				break;
			case 'week'://周榜
				$total = M('')->query("SELECT userid,SUM($field) as sum FROM income_log where YEARWEEK(DATE_FORMAT(date,'%Y-%m-%d'))=YEARWEEK(NOW()) GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10"); 
				break;
			case 'month'://月榜
				$total = M('')->query("SELECT userid,SUM($field) as sum FROM income_log where DATE_FORMAT(date,'%Y%m')=DATE_FORMAT(CURDATE(),'%Y%m') GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10"); 
				break;
			default: 
				break;
		}

下面是获取到的数据结果,只需要对其进行处理即可;这里,我是通过group by 将数据以用户id进行分组,方便用户信息的获取并排名;

Array
(
    [0] => Array
        (
            [userid] => 2
            [sum] => 6.00
        )

    [1] => Array
        (
            [userid] => 1
            [sum] => 6.00
        )

    [2] => Array
        (
            [userid] => 3
            [sum] => 1.00
        )

    [3] => Array
        (
            [userid] => 4
            [sum] => 0.20
        )

)

好了,今天就分享这么多;关于mysql查询速率优化方面的知识,由于本人所知浅薄,就不给大家阐述了-_-等知识丰富了再给大家分享这方面的内容~~~~一起加油哦!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值