2011-07-19 13 views
1

私はいくつかのデータをプロットするためにGoogleチャートAPIを使用しています。私は、MySQLデータベースからデータを取得し、MySQLを使用して印刷しています。PHPは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を出力します。私はどちらがあなたが興味を持っているのかはわかりませんが、 "dbから返された最小の年/月の組み合わせ"から "db"(または現在の年/月)から返される最大の年/ 。これを行うと、データベースの結果を反復して(年/月 - >値)マップに格納してから、daterangesを反復処理してマップから値を引き出すことが必要になります。
関連する問題