php - 如何使用mysql统计每天的一条记录

标签 php mysql sql json

如何根据其本身的日期对记录进行计数。我只是在 mysql 查询中使用 BETWEEN 传递两个日期,例如 2017-05-01 和 2017-05-10

表:

 tid    vid     dates       type
-------------------------------------
 1  TN01VD2365  2017-05-01  Cash
 2  TN01VD1254  2017-05-02  Cash
 3  TN03JG2589  2017-05-01  Credit
 4  TN12KL5874  2017-05-01  Cash
 5  TN14DS4569  2017-05-05  Compliment
 6  TN45KJ6987  2017-05-06  Credit
 7  TN45AS6542  2017-05-06  Cash
 8  TN78DF6589  2017-05-10  Complimant

我想要这样的结果

dates        typeCash       typeCredit      typeCompliment
---------------------------------------------------------------
2017-05-01       2           1             0
2017-05-02       1           0             0
2017-05-05       0           0             1
2017-05-06       1           1             0
2017-05-10       0           0             1

我的尝试

  $json="";

    $created_date1="5-1-2017";
    $created_date2="5-10-2017";


    if(isset($created_date1))
    {
        $x=explode("-",$created_date1);
        $created_date1=$x[1]."-".$x[0]."-".$x[2];
        $created_date1 = strtotime($created_date1);
        $created_date1 = date('Y-m-d',$created_date1);  
    }
if(isset($created_date2))
{
    $y=explode("-",$created_date2);
    $created_date2=$y[1]."-".$y[0]."-".$y[2];
    $created_date2 = strtotime("$created_date2");
    $created_date2 = date('Y-m-d',$created_date2);
}
    $date2=$created_date2;
    $i=0;
    while($created_date1<=$date2)
    {
        $created_date2=$created_date1;


                $mycount = "select 
                                    count(tid) as mycount 

                                    from 

                                    third_table 

                                    where 

                                    dates BETWEEN '".$created_date1."' AND '".$created_date2."'";


                $execte=mysql_query($mycount);
                $mynum=mysql_fetch_array($execte);
                $mynum_count=$mynum['mycount'];

            if($mynum_count>0)
            {
                    $trip_per_day="select 
                                    a.eid,a.name,
                                    count(b.tid) as trips_per_day,
                                    COUNT(IF(b.type_of_trip='Credit',1,null)) as credit_trips,
                                    COUNT(IF(b.type_of_trip='Compliment',1,null)) as compliment_trips 
                                    b.dates 
                                    from third_table b 
                                    LEFT JOIN add_employees a ON b.emp_id=a.eid 
                                    where b.dates between '$created_date1' and '$created_date2' 
                                    group by b.tid";

                    $run_qry=mysql_query($trip_per_day);
                    $row = mysql_fetch_array($run_qry);
                    $name = $row['name'];
                    $trip_per_day = $row['trips_per_day'];
                    $cash_trips = $row['cash_trips'];
                    $credit_trips = $row['credit_trips'];
                    $compliment_trips = $row['compliment_trips'];

                    $arr[$i]["name"]=$name;
                    $arr[$i]["date"]=$created_date1;//particular data
                    $arr[$i]["trips_per_day"] = $trip_per_day;//for trip_per_day
                    $arr[$i]["cash_trips"] = $cash_trips;//for cash_trips
                    $arr[$i]["credit_trips"] = $credit_trips;//for credit_trips
                    $arr[$i]["compliment_trips"] = $compliment_trips;//for compliment_trips
            }
            $inc_qry="select '".$created_date1."' + INTERVAL 1 DAY";
            $query=mysql_query($inc_qry);
            while($val=mysql_fetch_array($query))
            {
                $created_date1=$val[0];
            }
            $i++;
    }
    $json['all_counts_reports']=$arr;
    $json=json_encode($json);

    $array = json_decode($json,true);
    $array['all_counts_reports']=array_values($array['all_counts_reports']);
    //var_export(json_encode($array));
    echo $result = str_replace('', '', json_encode($array));

它将给出错误的输出以及不可停止的循环。如何使用 mysql 中的日期之间获取每日计数。请指导我。

最佳答案

无需使用 php 代码来完成您想要的工作,因为您可以在单个 SQL 查询中使用条件聚合获得所需的输出:

SELECT dates,
       SUM(type = 'Cash') AS typeCash,
       SUM(type = 'Credit') AS typeCredit,
       SUM(type = 'Compliment') AS typeCompliment
FROM mytable
WHERE dates BETWEEN '2017-05-01' AND '2017-05-10'
GROUP BY dates;

Demo here

关于php - 如何使用mysql统计每天的一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43885162/

相关文章:

php - 在 php 中制作作业队列系统的最佳实践是什么?

mysql - 索引提示和查询执行计划如何工作?

php - Mysql PDO 获取时的最大 LONGBLOB 数据长度

mysql - 如何使用存储过程删除mysql数据库中的所有 View ?

sql - 在 Excel VBA 中使用 SQL 记录集填充多列列表框

php - 无法修复 PDO 建立动态 sql 时参数编号无效

php - <option> 让每个选项都有自己的下拉菜单

php - 如何将具有空值的.json文件插入mysql?

php - 使用 PHP PDO 设置 PostgreSQL 模式的最佳替代方案

连接两个表的查询的 SQL Server "FOR XML"输出