Почему запрос SQL GROUP_CONCAT не работает?

#mysql

#mysql

Вопрос:

У меня есть этот запрос, но он выдает повторяющиеся значения в строке

 select products.name, products.image, products.image_second, 
products.description, products.min_order, size_categories.size_id, 
products.id, 
GROUP_CONCAT( product_prices.price order by FIND_IN_SET(sizes.id, size_categories.size_id)) as price,
GROUP_CONCAT( sizes.name order by FIND_IN_SET(sizes.id, size_categories.size_id) ) as sizes_name, 
units.name as units_name 
from `products` 
inner join `subcategories` on `products`.`subcategories_id` = `subcategories`.`id` 
inner join `size_categories` on `subcategories`.`categories_id` = `size_categories`.`categories_id` 
inner join `sizes` on FIND_IN_SET(sizes.id, size_categories.size_id) > '0' 
inner join `units` on `units`.`id` = `products`.`units_id` 
inner join product_prices on product_prices.products_id = products.id 
where `products`.`id` = '1' 
group by `products`.`name`, `products`.`image`, 
`products`.`image_second`, 
`products`.`description`, `products`.`min_order`, 
`size_categories`.`size_id`, `products`.`id`
  

Результат такой

 ------ size_id | id | price          | sizes_name
------  1,2       1   43,32,43,32       2m,2m,3m,3m 

  

32 — это цена 2m, а 43 — цена 3m.
Мне это нужно в одной строке, а также мне нужно поддерживать порядок (он должен быть как 32,43, а не как 43,32)
Нравится

 ------ size_id | id | price | sizes_name
------  1,2       1   32,43     2m,3m
  

Пожалуйста, помогите

Комментарии:

1. Используйте DISTINCT: GROUP_CONCAT(DISTINCT...)

2. это работает, если я использую distinct в обоих group_concat, но как насчет порядка?

3. результат, который я получаю, — это price 43,32 и sizes_name 2m,3m . 32 — это цена 2 млн. Как я могу поддерживать его в порядке?

4. Отправьте образец данных в скрипке: dbfiddle.uk/?rdbms=mysql_5.7 так что мы можем это проверить.

5. Я опубликовал это, пожалуйста, проверьте это

Ответ №1:

Вы пропустили условие:

 ...and product_prices.size_id = sizes.id
  

когда вы присоединяетесь product_prices .
При этом условии вам не нужен DISTINCT inside GROUP_CONCAT() для этого образца данных, хотя это может потребоваться для ваших фактических данных:

 select products.name, size_categories.size_id, products.id, 
GROUP_CONCAT(product_prices.price order by FIND_IN_SET(sizes.id, size_categories.size_id)) as price,
GROUP_CONCAT(sizes.name order by FIND_IN_SET(sizes.id, size_categories.size_id)) as sizes_name 
from products 
inner join subcategories on products.subcategories_id = subcategories.id 
inner join size_categories on subcategories.categories_id = size_categories.categories_id 
inner join sizes on FIND_IN_SET(sizes.id, size_categories.size_id)
inner join product_prices on product_prices.products_id = products.id and product_prices.size_id = sizes.id 
where products.id = '1' 
group by products.name, size_categories.size_id, products.id;
  

Посмотрите демонстрацию.
Результаты:

 > name | size_id | id | price | sizes_name
> :--- | :------ | -: | :---- | :---------
> PR1  | 1,2     |  1 | 32,43 | 2m,3m