2013-10-28 1 views
0

У меня возникла проблема, когда я получаю дублированные значения из того, что, как я думаю, должен получить.получение двойного значения от группы concact

вот мой SQL:

SELECT DISTINCT p.products_image, 
       pd.products_name, 
       p.products_id, 
       p.products_model, 
       p.manufacturers_id, 
       m.manufacturers_name, 
       p.products_price, 
       p.products_sort_order, 
       p.products_tax_class_id, 
       pd.products_viewed, 
       group_concat(p2i.icons_id separator ",") AS icon_ids, 
       group_concat(pi.icon_class separator ",") AS icon_class, 
       IF(s.status, s.specials_new_products_price, NULL) AS specials_new_products_price, 
       IF(s.status, s.specials_new_products_price, p.products_price) AS final_price 
FROM products p 
LEFT JOIN specials s ON p.products_id = s.products_id 
LEFT JOIN manufacturers m ON p.manufacturers_id = m.manufacturers_id 
JOIN products_description pd ON p.products_id = pd.products_id 
JOIN products_to_categories p2c ON p.products_id = p2c.products_id 
INNER JOIN products_specifications ps7 ON p.products_id = ps7.products_id 
LEFT JOIN products_to_icon p2i ON p.products_id = p2i.products_id 
LEFT JOIN products_icons pi ON p2i.icons_id = pi.icons_id 
WHERE p.products_status = '1' 
    AND pd.language_id = '1' 
    AND ps7.specification IN ('Polycotton' , 
          'Reflective') 
    AND ps7.specifications_id = '7' 
    AND ps7.language_id = '1' 
    AND p2c.categories_id = '21' 
GROUP BY p.products_id 
ORDER BY p.products_sort_order 

Столбец, получает двойные значения является icon_ids из группы concact. Эти швы случаются только в том случае, если тромбот и рефлексивные - это как IN ps7.спецификация.

Если это только один или другой, то он отлично работает.

В таблице products_to_icon содержится 2 столбца, products_id и icons_id.

Если у продукта есть 2 значка, есть 2 строки, поэтому я уверен, что именно этот факт вызывает дубликаты идентификаторов.

Когда я запускаю этот столбец icon_ids для продукта с 2-мя иконками «4,4,6,6», например, когда то, что мне нужно «4,6»

ответ

0

может быть что-то глупо, но для чего я могу читать из вашего запроса. Я попытался с некоторыми фиктивными данными,

GROUP_CONCAT(`icon`) product 
icon1,icon1    Test1 
icon2     Test2 
icon3     Test3 


SELECT GROUP_CONCAT( `icon`) , product 
FROM `Test1` 
WHERE 1 
GROUP BY `product` 
LIMIT 0 , 30 

Это работает отлично, и я запрашивая таблицу, которая выглядит следующим образом:

product icon 
Test1 icon1 
Test1 icon1 
Test2 icon2 
Test3 icon3 

Это результат, если я добавлю еще одну линию Test1 Icon2

GROUP_CONCAT(`icon`) product 
icon1,icon1,icon2 Test1 
icon2 Test2 
icon3 Test3 

Я забыл, что в принципе, я думаю, что ваша идея запроса верна, но по какой-то причине у вас есть дубликат (возможно, ошибка объединения или группировки, дублирующая строки). Попробуйте запустить запрос без агрегации и посмотрите, есть ли на самом деле больше строк, чем ожидалось.

Смежные вопросы