#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_name2m,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