SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.01.2017 22:40:41

buldog52
Участник
Зарегистрирован: 11.12.2016
Сообщений: 9

Помогите правильно сформировать запрос

Всем привет.
Очень нужна помощь форумчан.

Есть запрос (рабочий)
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 выводит какие-то данные
http://kherson-apartments.ru/zapros.jpg

Но, если мне например из категории 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`

получаем вот такой результат:
http://kherson-apartments.ru/zapros1.jpg

Я действительно получаю список товаров типа Кольца, а не всю 149 категорию, но все остальные свойства украшений не отображаются.
Как правильно модифицировать запрос чтобы выводить определенные изделия (Кольца) и все свойства были видны как на 1м скрине.
Спасибо.

Отредактированно buldog52 (19.01.2017 00:22:49)

Неактивен

 

#2 19.01.2017 00:34:07

buldog52
Участник
Зарегистрирован: 11.12.2016
Сообщений: 9

Re: Помогите правильно сформировать запрос

Не уверен, что правильно

но запрос такого вида

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

выводит данные в нужном мне формате
http://kherson-apartments.ru/zapros2.jpg

Неактивен

 

#3 19.01.2017 00:59:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Помогите правильно сформировать запрос

раз работает, значит правильно

может быть и можно сделать ограничение до группировки, чтобы простить запрос, но это нужно вникать в структуру таблиц и логику запроса; пока не ясно зачем вообще все эти group_concat если в итоге нигде нет перечислений

Неактивен

 

#4 19.01.2017 08:13:15

buldog52
Участник
Зарегистрирован: 11.12.2016
Сообщений: 9

Re: Помогите правильно сформировать запрос

vasya, Спасибо за ответ.
group_concat и group by нужны потому что в выводимых полях может быть не одно значение, на втором скрине в колонке pics это видно

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson