2016-02-02 122 views
0

這裏是我的發言:MySQL的,有條件的WHERE子句

SELECT 
    a.size AS 'size_id', 
    b.size, 
    a.stock, 
    a.id AS 'stock_id', 
    IFNULL(c.quantity,0) as 'cart_qty' 
FROM 
    stock a 
JOIN 
    sizes b ON a.size = b.id 
LEFT JOIN 
    cart_items c ON a.id = c.stock_id 
WHERE 
    a.product_id = '{$product['id']}' 
AND 
    c.cart_id = '$cart_id' 
AND 
    a.stock > 0 
ORDER BY 
    b.display_order 

在上面的,$ cart_id可能是空白,或者可能有沒有匹配的「cart_items」表。如何更改上述內容,以便如果cart_items中沒有匹配項,我仍然可以獲得與product_id匹配的庫存結果?但是,如果cart_items中有匹配,那麼我會得到額外的列(cart_qty)?

+0

如果您想獲得產品信息,無論它在購物車中,爲什麼您通過cart_id限制結果?只要刪除'AND c.cart_id = $ cart_id' –

+0

@Keiran Tai當標準產品頁面加載時運行。所以如果產品已經在用戶的購物車中,我想知道數量。 – daninthemix

回答

2

移動謂詞ON條款:

LEFT JOIN 
    cart_items c ON a.id = c.stock_id AND c.cart_id = '$cart_id' 

這樣一來,如果在cart_items沒有比賽,你仍然可以從stock匹配product_id,結果。否則,如果在cart_items中有匹配,則附加列cart_qty已正確填充。

+0

謝謝這麼多!很容易,一旦你知道如何... – daninthemix

0

我不確定你是否可以同時做這兩件事。但萬一$cart_Id is null第一個添加

AND ($cart_Id is null or c.cart_id = '$cart_id')