У меня есть таблица с именем products
, которая содержит все продукты, например, T-Shirt и product_variants
, которые имеют соответствующие варианты цветов, например. Черный, синий, зеленый, каждый из которых имеет столбец stock
, который удерживает количество оставшихся запасов.MySQL - IF в SELECT для значений столбцов нескольких строк
Я хотел бы построить запрос, который может рассказать мне, какие из продуктов, которые полностью распроданы, а какие нет.
Столбец stock
должен быть 0 продан, но если его NULL
или > 0
, это на складе. NULL
используется, когда у нас есть неограниченное количество.
Это следующий результат я хотел бы получить:
product_id|soldOut|stock
------------------
1 |Yes |0
2 |Yes |0
3 |No |NULL
4 |No |1
Что я пытался сделать, заключается в следующем:
- захватить все продукты
- Сделать присоединиться к product_variants
- Группа product_id показывает только один результат на продукт.
- Выбор product_id и
IF(stock > 0 OR stock IS NULL, 'No', 'Yes') as SoldOUt
Запрос:
SELECT p.product_id, IF(pv.stock > 0 OR pv.stock IS NULL, 'No', 'Yes') as SoldOUt
FROM products p
JOIN product_variants pv ON (`pv`.`product_id` = `p`.`product_id`)
GROUP BY p.product_id
Результаты в том, что soldOut
не правильно - похоже, он просто берет случайный ряд вариантов и проверить stock
этого и ответы.
Вместо этого он должен проверить все строки вариантов и посмотреть, не было ли еще что-либо из них еще не продано. (С инструкцией if выше), а затем вернуть один окончательный ответ для этого продукта.
Что я сделал неправильно и как это можно сделать?
Спасибо! Дала мне новый способ подумать. – Karem