2009-09-10 94 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...