2009-09-10 99 views
0

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

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

你应该能够使用分组来为你做这个:

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。日期(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"; 
+0

我想要的日期出现在列。这就是我写这样的查询的原因。 – shantanuo 2009-09-10 13:08:28

+0

是的。这是我想要的。谢谢。 – shantanuo 2009-09-12 05:47:18

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...