Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据日期和间隔对mysql分组进行重新测试_Php_Mysql_Sql - Fatal编程技术网

Php 根据日期和间隔对mysql分组进行重新测试

Php 根据日期和间隔对mysql分组进行重新测试,php,mysql,sql,Php,Mysql,Sql,我有一张桌子: 表1 我希望得到以下结果: value date 2 2014-10-11 7 2014-10-12 0 2014-10-13 6 2014-10-14 我如何在mysql中做到这一点?谢谢 P> S:那一行在哪里:0 2014-10-13?试试下面的内容: SELECT SUM(value) AS value, DATE(date) As Date FROM Table GROUP BY DATE(date) 请尝试以下查询: Select

我有一张桌子:

表1

我希望得到以下结果:

value date
2     2014-10-11
7     2014-10-12
0     2014-10-13
6     2014-10-14
我如何在mysql中做到这一点?谢谢

P> S:那一行在哪里:0 2014-10-13?

试试下面的内容:

SELECT SUM(value) AS value, DATE(date) As Date 
FROM Table
GROUP BY DATE(date)
请尝试以下查询:

Select sum(value), DATE(`date`) from table1 group by DATE(`date`)
试试这个

SELECT SUM(value) AS value,
       DATE(date) AS date
FROM table1
GROUP BY DATE(date)

您必须使用分组方式

select sum(value) ,DATE_FORMAT(date,'%Y-%d-%m') as date from MyTable group by DATE_FORMAT(date,'%Y-%d-%m') 
试试这个

<?php
$a = mysqli_query($db, "SELECT SUM(value) AS value,  DATE(date) AS date, DAYOFMONTH(date) AS day FROM mytable GROUP BY DATE(date)");
WHILE($a2 = mysqli_fetch_array($a))
{
    if($daycheck == "")
    {
        $daycheck = $a2[day];
    }
    else
    {
        if(($daycheck + 1) != $a2[day])
        {
            for($x = ($daycheck+1); $x<$a2[day]; $x++)
            {
                $date_new2 = date('Y-m-d', strtotime($daycheck2 . ' + 1 day'));
                echo "0-----".$date_new2."<br>";
                $daycheck2 = $date_new2;
            }
        }
    }
    echo $a2[value]."-----".$a2[date]."<br>";
    $daycheck = $a2[day];
    $daycheck2 = $a2[date];
}
?>

这将显示0个值,在结果中间<0/P>> P>中,为了实现你想要的,你需要在你的范围内生成所有的日期,然后使用左连接。以下是一种方法:

select d.d, sum(t1.value) as value
from (select date('2014-10-11') as d union all
      select date('2014-10-12') as d union all
      select date('2014-10-13') as d union all
      select date('2014-10-14') as d
     ) d left join
     table1 t1
     on date(t1.date) = d.d
group by d.d
order by d.d;

MySQL不能生成日期间隙,除非您有另一个具有所有日期的表并与之结合。您可以使用PHP来显示日期间隙。这将是分页的问题……编辑我的答案,这将在查询结果中间显示值为0的日期间隙。
select sum(value) ,DATE_FORMAT(date,'%Y-%d-%m') as date from MyTable group by DATE_FORMAT(date,'%Y-%d-%m') 
<?php
$a = mysqli_query($db, "SELECT SUM(value) AS value,  DATE(date) AS date, DAYOFMONTH(date) AS day FROM mytable GROUP BY DATE(date)");
WHILE($a2 = mysqli_fetch_array($a))
{
    if($daycheck == "")
    {
        $daycheck = $a2[day];
    }
    else
    {
        if(($daycheck + 1) != $a2[day])
        {
            for($x = ($daycheck+1); $x<$a2[day]; $x++)
            {
                $date_new2 = date('Y-m-d', strtotime($daycheck2 . ' + 1 day'));
                echo "0-----".$date_new2."<br>";
                $daycheck2 = $date_new2;
            }
        }
    }
    echo $a2[value]."-----".$a2[date]."<br>";
    $daycheck = $a2[day];
    $daycheck2 = $a2[date];
}
?>
select d.d, sum(t1.value) as value
from (select date('2014-10-11') as d union all
      select date('2014-10-12') as d union all
      select date('2014-10-13') as d union all
      select date('2014-10-14') as d
     ) d left join
     table1 t1
     on date(t1.date) = d.d
group by d.d
order by d.d;