2011-07-19 36 views
1

我正在使用谷歌圖表API來繪製一些數據。我從MySQL數據庫中獲取數據並使用MySQL進行打印。MySQL打印0不是由MySQL返回的月份

<?php 

$income_from_clients = $mysql_obj->select (" 
    SELECT 
    sum(invoice.invoice_amount_payable) AS invoice_totals, 
    company.company_label AS company_label, 
    MONTHNAME(invoice.invoice_date_paid) AS month, 
    YEAR(invoice.invoice_date_paid) AS year 
    FROM invoice INNER JOIN company ON invoice.company_id = company.company_id 
    WHERE 
    invoice.invoice_active=1 
    AND invoice.invoice_status_id=7 
    AND invoice.invoice_date_deleted=0 
    AND invoice.invoice_date_paid>='" . $_POST ["start_date_"] . "-" . $_POST ["start_date_month"] . "-" . $_POST ["start_date_date"] . "' 
    AND invoice.invoice_date_paid<='" . $_POST ["end_date_"] . "-" . $_POST ["end_date_month"] . "-" . $_POST ["end_date_date"] . "' 
    AND company.company_id=" . $_POST ["company_id"] . " 
    GROUP BY company.company_id, MONTH(invoice.invoice_date_paid), YEAR(invoice.invoice_date_paid) 
    ORDER BY YEAR(invoice.invoice_date_paid), MONTH(invoice.invoice_date_paid)"); 

echo "data.addRows($mysql_obj->mysql_num_rows);"; 

$i = 0; 
foreach ($income_from_clients as $ifc) { 
    echo "data.setValue($i, 0, '" . $ifc ["month"] . " " . $ifc ["year"] . "');\n"; 
    echo "data.setValue($i, 1, " . $ifc ["invoice_totals"] . ");\n"; 
    $i ++; 
} 

?> 

這工作正常但是沒有發票的任何月份只是簡單地跳過圖表,因爲它沒有返回從MySQL返回。我如何得到它在這些月份繪製一個0?

謝謝。

回答

0

此刻,你遍歷從數據庫的結果,並輸出基於它返回的行值。由於它不返回值爲0的行,因此在輸出中不會看到這些行。

兩個可行的解決方案包括:

  • 修改SQL,使其具有的值返回行0(見薩庫馬爾的答案)
  • 更改你的PHP,以便它遍歷年/月組合您感興趣並輸出數據庫中的值,如果沒有,則輸出0。我不確定哪些是你「感興趣」,但你可能能夠迭代FROM「從db返回的最小年/月組合」到「從db返回的最大年/月組合」(或當前年/月) 。如果你這樣做,你可能需要遍歷數據庫中的結果並將它們放入(年/月 - >值)映射中......然後迭代日期範圍並從映射中提取值。