用于创建日期的数组

时间:2009-09-10 13:01:15

标签: php arrays

我想使用可以在MySQL中使用的PHP创建一个数组。 我的查询看起来像这样......

select
    name,
    sum(if (tdate='2009-09-09', amount, 0) as day1,
    sum(if(tdate='2009-09-10', amount, 0) as day2
    ...
    ... 
    sum(if(tdate='2009-10-01', amount, 0) as day23
from revenue
group by name;

日期范围可能会发生变化,但始终不超过30天。 如果我向PHP数组提供开始和结束日期,它是否能够生成如上所示的查询?

2 个答案:

答案 0 :(得分:2)

您应该可以使用分组为您执行此操作:

SELECT name, DATE(tdate) as d, SUM(amount)
FROM revenue
WHERE d >= NOW() AND d < DATE_ADD(NOW(), 30 DAYS)
GROUP BY name, d

这将为您提供新行的每个日期,而不是同一行中的多个字段,但它有望为您提供可行的解决方案。

我认为tdatedatetime。 DATE(tdate)会将其转换为日期(删除时间部分)。另外,将WHERE子句替换为您需要的任何范围。


编辑:好的,所以我们需要为每个名称添加一行,并根据需要添加多个字段。这种表被称为“交叉表”,而MySQL并没有以一种很好的方式真正支持它,但你绝对可以将它一起破解。有关详细信息,请参阅此处:http://rpbouman.blogspot.com/2005/10/creating-crosstabs-in-mysql.html

但是,如果事先知道日期,那么使用PHP将它们放在一起就不会太难了。

// get this list in whichever way you wish
$dates = array("2009-09-09", "2009-09-10", "2009-09-11");

$sql = "SELECT name, "
     . "sum(if (tdate='"
     . implode("', amount, 0), sum(if (tdate='", $dates)
     . "', amount, 0)"
     . "FROM revenue "
     . "GROUP BY name";

答案 1 :(得分:0)

如果您想生成显示的查询,可以使用PHP中的日期函数来帮助生成字符串:

$dateString1 = date("Y-m-d", $date);
$dateString2 = date("Y-m-d", $date2);
$sql = "select
           name,
           sum(if (tdate='$dateString1', amount, 0) as day1,
           sum(if (tdate='$dateString2', amount, 0) as day2
         from revenue
         group by name;";
// Run the query as usual...