Мне нужно отобразить продукт с его ценой и текущим запасом (если есть) этого продукта с указанным c цветом и атрибутами. Он делает то, что должен, частично. Это объяснение запроса (или, по крайней мере, то, что он должен делать):
- Получить основную c информацию о продукте из
store_product
- Продукт имеет акции. Этот запас связан с идентификатором цвета и идентификатором детали атрибута.
- Товар, связанный с идентификатором цвета, может иметь несколько идентификаторов деталей атрибута. Так, например, стоимость запаса красной рубашки из полиэфирного материала может отличаться от стоимости запаса красной рубашки размера M.
Для этого конкретного примера я пытаюсь получить стоимость запаса для продукта Идентификатор 59
, который соответствует этим спецификациям c значения
id_color
должен быть 1
(1 = красный , имеющий настраиваемое имя красный deadpool ) id_detail
должно быть 4
в одном ряду, а 50
в другом (4
= Размер M / 50
= Материал Полиэстер )
Вот что я сейчас получаю:
Запрос частично правильно, потому что:
- Я получаю 2 строки, по одной для каждой комбинации цвета / атрибута
- Я получаю правильный
id_stock
ID для каждой строки, и я также получение правильного значения запаса для комбинации цвета / атрибута.
Проблема в том, что, хотя информация о запасе верна, id_attribute
/ attribute
/ * 10 54 * / detail
неверная информация.
Это то, что мне нужно для получения (исправление выделено жирным шрифтом):
SELECT store_product.id_product AS id_product,
store_product.NAME AS NAME,
store_product.price AS price,
store_product.flg_stock AS flg_stock,
store_product_stock.id AS id_stock,
store_product_stock.stock AS stock,
Ifnull(store_color.NAME, color.NAME) AS color,
color.hex AS hex,
store_attribute.id_attribute AS id_attribute,
store_attribute.NAME AS attribute,
store_attribute_detail.id_detail AS id_detail,
store_attribute_detail.NAME AS detail
FROM store_product
LEFT JOIN store_product_color
ON store_product_color.id_color = store_product_color.id_color
LEFT JOIN color
ON color.id_color = store_product_color.id_color
LEFT JOIN store_color
ON store_color.id_color = color.id_color
AND store_color.id_store = 1
LEFT JOIN store_product_detail
ON store_product_detail.id_product = store_product.id_product
LEFT JOIN store_attribute_detail
ON store_attribute_detail.id_detail =
store_product_detail.id_detail
LEFT JOIN store_attribute
ON store_attribute.id_attribute =
store_attribute_detail.id_attribute
LEFT JOIN store_product_stock
ON store_product_stock.id_product = store_product.id_product
AND store_product_stock.id_color = 1
AND store_product_stock.id_detail IN( 4, 50 )
WHERE store_product.id_store = 1
AND store_product.id_product = 59
AND store_product_color.id_color = 1
GROUP BY store_product_stock.id
Здесь вы можете найти всю структуру таблицы и текущий запрос, в котором возникла проблема: sqlfiddle
Любые идеи о том, как решать проблему? Спасибо!