2012-12-20 46 views
0

我有報告顯示出售的產品以及每種產品的總重量。下面是代碼的標記,顯示總重量:在沒有數據的情況下返回設定值

$weightsql = 'select op.products_name, sum(op.products_quantity * p.products_weight) as weightsum from ' . TABLE_ORDERS_PRODUCTS . ' op left join ' . TABLE_PRODUCTS . ' p on op.products_id = p.products_id where op.products_id = '.$pro['products_id']; 
$weightq = tep_db_query($weightsql); 
while ($weight = tep_db_fetch_array($weightq)){ 
if($category_parent_id != 0)$list_items[] = $weight['weightsum']; 
} 

它於訂購的產品返回值,但無序的產品,它保持空白,這是非常令人困惑。如何爲無序產品返回0.00(產品未從查詢中拉出)。

例子:

Product Name   |    Total Weight 
         | 
Jelly Beans   |    25.00 
Soft Candy   |        This product has not been ordered, needs to show 0.00 
Bubblegum   |    10.00 

回答

1

您正在尋找coalesce功能。

coalesce(sum(op.products_quantity * p.products_weight), 0) 

此外,改變left joinright join因爲在查詢product是對order權。

這將取代空值到0

編輯到期OP評論。

select 
    op.products_name, 
    coalesce(sum(op.products_quantity * p.products_weight), 0) as weightsum, 
    case when sum(op.products_quantity * p.products_weight) is NULL then 'Normal' 
     else 'Bold' end 
    as stype 
... 
+0

感謝您的快速幫助,它會讓我接受答案。 – user1879415

+0

如果我想將正確的值和正常的零值一起用於識別已售出的產品,那麼將如何完成? – user1879415

+0

在帖子中回覆。 @ user1879415,下一次爲新問題寫一個新帖子,不要改變問題要求。 – danihp

0

從我瞭解你的問題:從TABLE_PRODUCTSTABLE_ORDERS_PRODUCTS如果你希望所有的行,用匹配的行(如果有的話),你就需要RIGHT JOIN,而不是您可以使用所需的樣式添加新列您的查詢中有一個LEFT JOIN

不過,我更喜歡在查詢中使用LEFT JOIN只要有可能,所以我會重新排序表

<剪斷>

... from ' . TABLE_PRODUCTS . ' p left join ' . TABLE_ORDERS_PRODUCTS . ' op ... 

< /剪斷>

這會解決問題,如果你的問題是你沒有得到你期望的行。


另一個問題是處理由OUTER JOIN返回的行返回的NULL值。簡單的回答有來包裝這些表達式在IFNULL函數返回一個0(或0.00,如果你需要小數型)

<剪斷>

... IFNULL(sum(op.products_quantity * p.products_weight) ,0.0) as ... 

... sum(IFNULL(op.products_quantity,0.0) * IFNULL(p.products_weight, 0.0)) as 

</snip>


問:如果我想將正確的值設爲粗體,並且將空值作爲正常值來識別已售出的產品,那麼將如何完成?

答:

我希望你將需要在生成的HTML適當< B></B>標籤。 (我們通常不會從數據庫查詢中返回這些類型的標記標記,因爲很多標記通常由CSS處理。)

從數據庫中,您可以在SELECT列表中包含表達式,讓你知道,如果匹配的行中的TABLE_ORDERS_PRODUCT表或不被人發現,這樣的事情:

IF(op.products_id IS NULL,0,1) AS is_ordered 

這會回報給你一個0,如果沒有匹配的​​在TABLE_ORDERS_PRODUCT表被發現,否則它會返回一個1.

然後,您可以使用此值來確定什麼樣式或m arkup應該適用於你需要的任何元素來加粗。

+0

如果我想將正確的值作爲正常的粗體和空值來識別已售出的產品,那麼將如何完成? – user1879415

相關問題