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

      发布在:后端技术      评论:0 条评论
<p>在我们的开发过程中,往往会遇到对会员或者商家进行收益排行,分别按照当月,当周或者当日进行排序;当然,你可以先把用到的数据获取到,然后再根据你想要的功能对数据进行相应处理。下面,我要给大家演示的是直接对MySQL进行操作,利用MySQL的一些统计函数,很方便的进行数据的筛选。</p><p>首先,给大家介绍的是使用php获取当日、当周、当月以及昨日等时间戳;</p><p><br/></p><p>获取今日开始时间戳和结束时间戳</p><pre class="brush:php;toolbar:false">$today_start=mktime(0,0,0,date(&#39;m&#39;),date(&#39;d&#39;),date(&#39;Y&#39;));<br/> $today_end=mktime(0,0,0,date(&#39;m&#39;),date(&#39;d&#39;)+1,date(&#39;Y&#39;))-1;<br/></pre><p>获取昨日起始时间戳和结束时间戳</p><pre class="brush:php;toolbar:false"> $yesterday_start=mktime(0,0,0,date(&#39;m&#39;),date(&#39;d&#39;)-1,date(&#39;Y&#39;));<br/> $yesterday_end=mktime(0,0,0,date(&#39;m&#39;),date(&#39;d&#39;),date(&#39;Y&#39;))-1;<br/></pre><p>获取上周起始时间戳和结束时间戳</p><pre class="brush:php;toolbar:false"> $lastweek_start=mktime(0,0,0,date(&#39;m&#39;),date(&#39;d&#39;)-date(&#39;w&#39;)+1-7,date(&#39;Y&#39;));<br/> $lastweek_end=mktime(23,59,59,date(&#39;m&#39;),date(&#39;d&#39;)-date(&#39;w&#39;)+7-7,date(&#39;Y&#39;));<br/></pre><p>获取本周周起始时间戳和结束时间戳</p><pre class="brush:php;toolbar:false"> $thisweek_start=mktime(0,0,0,date(&#39;m&#39;),date(&#39;d&#39;)-date(&#39;w&#39;)+1,date(&#39;Y&#39;));<br/> $thisweek_end=mktime(23,59,59,date(&#39;m&#39;),date(&#39;d&#39;)-date(&#39;w&#39;)+7,date(&#39;Y&#39;));<br/></pre><p>获取本月起始时间戳和结束时间戳</p><pre class="brush:php;toolbar:false"> $thismonth_start=mktime(0,0,0,date(&#39;m&#39;),1,date(&#39;Y&#39;));<br/> $thismonth_end=mktime(23,59,59,date(&#39;m&#39;),date(&#39;t&#39;),date(&#39;Y&#39;));<br/></pre><p>&nbsp;下面是MySQL获取当天,当周,当月等数据一些基本操作;</p><p><br/></p><p>查询当天的数据</p><pre class="brush:bash;toolbar:false"> SELECT * FROM 表名 WHERE TO_DAYS(时间字段)=TO_DAYS(NOW());<br/></pre><p>查询昨天的数据</p><pre class="brush:bash;toolbar:false">SELECT * FROM 表名 WHERE TO_DAYS(NOW())-TO_DAYS(时间字段)=1;<br/></pre><p>查询当周的数据</p><pre class="brush:bash;toolbar:false">SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段,&#39;%Y-%m-%d&#39;))=YEARWEEK(NOW());<br/></pre><p>查询上周的数据</p><pre class="brush:bash;toolbar:false">SELECT * FROM 表名 WHERE YEARWEEK(DATE_FORMAT(时间字段,&#39;%Y-%m-%d&#39;))=YEARWEEK(NOW())-1;<br/></pre><p>查询当月的数据</p><pre class="brush:bash;toolbar:false"> SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段,&#39;%Y%m&#39;)=DATE_FORMAT(CURDATE(),&#39;%Y%m&#39;);<br/></pre><p>查询上月的数据</p><pre class="brush:bash;toolbar:false">SELECT * FROM 表名 WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),&#39;%Y%m&#39;),DATE_FORMAT(时间字段,&#39;%Y%m&#39;))=1;<br/></pre><p>查询当年的数据</p><pre class="brush:bash;toolbar:false">SELECT * FROM 表名 WHERE YEAR(时间字段) =YEAR(NOW());<br/></pre><p>查询最近7天的数据</p><pre class="brush:bash;toolbar:false"> SELECT * FROM 表名 WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY)&lt;=DATE(时间字段);<br/></pre><p>下面我们将使用上述的一些查询操作,对下图所示的收益排行功能进行数据处理;</p><p><br/></p><p><br/></p><p>数据格式如上图,下面直接上代码:</p><pre class="brush:php;toolbar:false">switch ($style) {<br/><br/> case &#39;total&#39;://总榜<br/> // $total = M(&#39;income_log&#39;)-&gt;group(&#39;userid&#39;)-&gt;sum($field);<br/> $total = M(&#39;&#39;)-&gt;query(&quot;SELECT userid,SUM($field) as sum FROM income_log GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10&quot;);<br/> break;<br/> case &#39;day&#39;://日榜<br/> $total = M(&#39;&#39;)-&gt;query(&quot;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&quot;); <br/> break;<br/> case &#39;week&#39;://周榜<br/> $total = M(&#39;&#39;)-&gt;query(&quot;SELECT userid,SUM($field) as sum FROM income_log where YEARWEEK(DATE_FORMAT(date,&#39;%Y-%m-%d&#39;))=YEARWEEK(NOW()) GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10&quot;); <br/> break;<br/> case &#39;month&#39;://月榜<br/> $total = M(&#39;&#39;)-&gt;query(&quot;SELECT userid,SUM($field) as sum FROM income_log where DATE_FORMAT(date,&#39;%Y%m&#39;)=DATE_FORMAT(CURDATE(),&#39;%Y%m&#39;) GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10&quot;); <br/> break;<br/> default: <br/> break;<br/> }<br/></pre><p>下面是获取到的数据结果,只需要对其进行处理即可;这里,我是通过group by 将数据以用户id进行分组,方便用户信息的获取并排名;</p><pre class="brush:bash;toolbar:false">Array<br/>(<br/> [0] =&gt; Array<br/> (<br/> [userid] =&gt; 2<br/> [sum] =&gt; 6.00<br/> )<br/><br/> [1] =&gt; Array<br/> (<br/> [userid] =&gt; 1<br/> [sum] =&gt; 6.00<br/> )<br/><br/> [2] =&gt; Array<br/> (<br/> [userid] =&gt; 3<br/> [sum] =&gt; 1.00<br/> )<br/><br/> [3] =&gt; Array<br/> (<br/> [userid] =&gt; 4<br/> [sum] =&gt; 0.20<br/> )<br/><br/>)<br/></pre><p>来源:https://blog.csdn.net/u011089530/article/details/64907361</p>
相关文章
热门推荐