PHP+MySQL對當月,當週,當日資料統計,並將相應欄位分組排序
阿新 • • 發佈:2019-02-15
在我們的開發過程中,往往會遇到對會員或者商家進行收益排行,分別按照當月,當週或者當日進行排序;當然,你可以先把用到的資料獲取到,然後再根據你想要的功能對資料進行相應處理。下面,我要給大家演示的是直接對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查詢速率優化方面的知識,由於本人所知淺薄,就不給大家闡述了-_-等知識豐富了再給大家分享這方面的內容~~~~一起加油哦!