Php 根据日期和间隔对mysql分组进行重新测试
我有一张桌子: 表1 我希望得到以下结果: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
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;