2016-02-02 2 views
0

Вот мое заявление:MySQL, условное ИНЕКЕ

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

Thankyou так много! Так легко, как только вы знаете, как ... – daninthemix

0

Я не уверен, что вы можете сделать то и другое. Но первый один в случае $cart_Id is null добавить

AND ($cart_Id is null or c.cart_id = '$cart_id') 
Смежные вопросы