Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет.
Очень нужна помощь форумчан.
Есть запрос (рабочий)
SELECT
PCP.`id_product` , PPL.`name` , PP.`id_supplier` AS supplier,
IF (PP.`id_supplier`, PS.`name`, null) AS 'поставщик',
GROUP_CONCAT(DISTINCT IF (PII.`id_image`,PII.`id_image`,NULL)) AS 'pics' ,
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=9,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'feat9',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=9,PFVL.`value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'материал',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=8,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value` ASC) AS feat8,
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=8,PFVL.`value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'тип украшения',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=42,PFP.`id_feature_value`,null)) AS 'feat42',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=42,PFVL.`value`,null)) AS 'цвет металла',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=10,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value`) AS 'feat10',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=10,PFVL.`value`,null) ORDER BY PFP.`id_feature_value`) AS 'вставки'
FROM `ps_category_product` AS PCP
LEFT JOIN `ps_product_lang` AS PPL ON (PCP.`id_product` = PPL.`id_product`)
LEFT JOIN `ps_feature_product` AS PFP ON (PCP.`id_product` = PFP.`id_product`)
LEFT JOIN `ps_feature_value_lang` AS PFVL ON (PFP.`id_feature_value` = PFVL.`id_feature_value`)
LEFT JOIN `ps_product` AS PP ON (PCP.`id_product` = PP.`id_product`)
LEFT JOIN `ps_image` AS PII ON (PCP.`id_product` = PII.`id_product`)
LEFT JOIN `ps_supplier` AS PS ON (PP.`id_supplier` = PS.`id_supplier`)
WHERE PCP.`id_category` = 149
GROUP BY PCP.`id_product`
который из категории 149 выводит какие-то данные
Но, если мне например из категории 149 нужно список украшений, например только Кольцо, я модифицирую запрос таким образом
SELECT
PCP.`id_product` , PPL.`name` , PP.`id_supplier` AS supplier,
IF (PP.`id_supplier`, PS.`name`, null) AS 'поставщик',
GROUP_CONCAT(DISTINCT IF (PII.`id_image`,PII.`id_image`,NULL)) AS 'pics' ,
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=9,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'feat9',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=9,PFVL.`value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'материал',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=8,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value` ASC) AS feat8,
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=8,PFVL.`value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'тип украшения',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=42,PFP.`id_feature_value`,null)) AS 'feat42',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=42,PFVL.`value`,null)) AS 'цвет металла',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=10,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value`) AS 'feat10',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=10,PFVL.`value`,null) ORDER BY PFP.`id_feature_value`) AS 'вставки'
FROM `ps_category_product` AS PCP
LEFT JOIN `ps_product_lang` AS PPL ON (PCP.`id_product` = PPL.`id_product`)
LEFT JOIN `ps_feature_product` AS PFP ON (PCP.`id_product` = PFP.`id_product`)
LEFT JOIN `ps_feature_value_lang` AS PFVL ON (PFP.`id_feature_value` = PFVL.`id_feature_value`)
LEFT JOIN `ps_product` AS PP ON (PCP.`id_product` = PP.`id_product`)
LEFT JOIN `ps_image` AS PII ON (PCP.`id_product` = PII.`id_product`)
LEFT JOIN `ps_supplier` AS PS ON (PP.`id_supplier` = PS.`id_supplier`)
WHERE PCP.`id_category` = 149
AND PFP.`id_feature_value`=34 /*код Кольца*/
GROUP BY PCP.`id_product`
получаем вот такой результат:
Я действительно получаю список товаров типа Кольца, а не всю 149 категорию, но все остальные свойства украшений не отображаются.
Как правильно модифицировать запрос чтобы выводить определенные изделия (Кольца) и все свойства были видны как на 1м скрине.
Спасибо.
Отредактированно buldog52 (19.01.2017 00:22:49)
Неактивен
Не уверен, что правильно
но запрос такого вида
SELECT
PCP.`id_product` , PPL.`name` , PP.`id_supplier` AS supplier,
IF (PP.`id_supplier`, PS.`name`, null) AS 'поставщик',
GROUP_CONCAT(DISTINCT IF (PII.`id_image`,PII.`id_image`,NULL)) AS 'pics' ,
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=9,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'feat9',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=9,PFVL.`value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'материал',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=8,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value` ASC) AS feat8,
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=8,PFVL.`value`,null) ORDER BY PFP.`id_feature_value` ASC) AS 'тип украшения',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=42,PFP.`id_feature_value`,null)) AS 'feat42',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=42,PFVL.`value`,null)) AS 'цвет металла',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=10,PFP.`id_feature_value`,null) ORDER BY PFP.`id_feature_value`) AS 'feat10',
GROUP_CONCAT(DISTINCT iF(PFP.`id_feature`=10,PFVL.`value`,null) ORDER BY PFP.`id_feature_value`) AS 'вставки'
FROM `ps_category_product` AS PCP
LEFT JOIN `ps_product_lang` AS PPL ON (PCP.`id_product` = PPL.`id_product`)
LEFT JOIN `ps_feature_product` AS PFP ON (PCP.`id_product` = PFP.`id_product`)
LEFT JOIN `ps_feature_value_lang` AS PFVL ON (PFP.`id_feature_value` = PFVL.`id_feature_value`)
LEFT JOIN `ps_product` AS PP ON (PCP.`id_product` = PP.`id_product`)
LEFT JOIN `ps_image` AS PII ON (PCP.`id_product` = PII.`id_product`)
LEFT JOIN `ps_supplier` AS PS ON (PP.`id_supplier` = PS.`id_supplier`)
WHERE PCP.`id_category` = 149
GROUP BY PCP.`id_product`
HAVING feat8=34
выводит данные в нужном мне формате
Неактивен
раз работает, значит правильно
может быть и можно сделать ограничение до группировки, чтобы простить запрос, но это нужно вникать в структуру таблиц и логику запроса; пока не ясно зачем вообще все эти group_concat если в итоге нигде нет перечислений
Неактивен
vasya, Спасибо за ответ.
group_concat и group by нужны потому что в выводимых полях может быть не одно значение, на втором скрине в колонке pics это видно
Неактивен