即使存在空/空/不存在也打印数据。注意:某些单元格不存在

时间:2013-06-12 13:20:25

标签: php sql printing

我有一个问题,我已经搜索了几个小时的解决方案。但直到现在,我还没有找到任何东西。问题是我有以下查询:

$sql    = "SELECT
           MONTH( i.invoicedate ) AS month,
           ROUND(SUM(t.transactions * ( t.selling_price - t.buyin ) ),0) AS margin
           FROM invoice i, project p, transactions t, users u
           WHERE 
               t.project = p.proj_id AND 
               t.invoice = f.inv_id AND 
               p.proj_owner = u.usr_id AND 
               YEAR( i.invoice_date ) = '2012' AND
                   u.usr_login = '" . $current_user->first_name . "'
           GROUP BY MONTH( i.invoice_date )
           UNION
           SELECT DISTINCT
               MONTH(p.invoicedate) AS month,
               SUM( ROUND( p.quantity * p.listprice - IF( p.discount_percent > 0,
               p.quantity * p.listprice * p.discount_percent / 100, 0 ) - IF( i.discount_amount > 0, p.discount_amount, 0 ), 0 ) ) - SUM( ROUND( p.quantity * purchaseprice, 0 ) ) AS margin
           FROM productrel p
           LEFT JOIN invoice f ON i.id=f.invoiceid 
           LEFT JOIN entity e ON e.id=f.invoiceid
           LEFT JOIN salesorder s ON f.salesorderid = s.salesorderid
           LEFT JOIN entity t ON t.id=s.salesorderid
           LEFT JOIN users d ON t.ownerid=d.id
           WHERE 
               e.deleted=0 AND
               t.ownerid <> 15 AND
               d.id = " . $current_user->id . " AND
               YEAR(f.invoicedate)='2012'
               GROUP BY MONTH(f.invoicedate)";

$result = $adb->pquery($sql, array());
while ($row = $adb->fetch_array($result)) {
  $margin .= $row['margin'].', ';                                                                       
}

使用此查询,输出如下所示:

-------------------------------
|   Month    |    Margin      |
|-----------------------------
|     5      |     3824       |
|    11      |    24344       |
|    12      |    45664       |
|            |                |

主要问题是我想从所有月份显示该用户的数据。即使它是空的。更糟糕的是,很多单元格都没有出现,正如您在示例中所看到的那样。所以我想要的是:

-------------------------------
|   Month    |    Margin      |
|-----------------------------
|     1      |      0         |
|     2      |      0         |
|     3      |      0         |
|     4      |      0         |
|     5      |     3824       |
|     6      |      0         |
|     7      |      0         |
|     8      |      0         |
|     9      |      0         |
|    10      |      0         |
|    11      |    24344       |
|    12      |    45664       |
|            |                |

像这样格式化,如果我用PHP打印它:

0,0,0,0,3824,0,0,0,0,024344,45664

最后一点说明:无法使用此数据制作附加表格,因为我没有权利这样做。

1 个答案:

答案 0 :(得分:0)

您可以通过每月循环来实现此目的,并在数据库中存在值时输出值,如果没有则输出0。例如;

$rows = array();
while ($row = $adb->fetch_array($result)) 
{
    $rows[$row['month']] = $row['margin'];
}
for ($i = 1; $i < 13; $i++) {
    $margin .= (isset($rows[$i]) ? $rows[$i] : 0) . ', ';
}