#mysql #laravel
#mysql #laravel
Вопрос:
Приведенный ниже запрос выдает такие данные
select
products.name,
products.image,
products.image_second,
products.description,
products.min_order,
size_categories.size_id,
products.id,
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`
where
`products`.`id` = '1'
group by
`products`.`name`,
`products`.`image`,
`products`.`image_second`,
`products`.`description`,
`products`.`min_order`,
`size_categories`.`size_id`,
`products`.`id`
name | image | image_second | description | min_order | size_id | id | sizes_name | units_name
Pr1 up/.. uploads/... sdsds 123 1,2 1 2m,3m Piece(s)
Запрос правильный,
но теперь мне тоже нужна цена,
поэтому я должен добавить соединение в таблицу products_prices, размеры каждого продукта имеют разные цены.
Как я могу это получить?
Я попробовал этот запрос, но он дает мне две строки
select products.name, products.image, products.image_second,
products.description, products.min_order, size_categories.size_id,
products.id,
GROUP_CONCAT( product_prices.price ) 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`,product_prices.price
Результат выглядит следующим образом
------ size_id | id | price | sizes_name
------ 1,2 1 32,32 2m,3m
------ 1,2 1 43,43 2m,3m
32 — это цена 2m, а 43 — цена 3m.
Мне это нужно в одной строке, а также мне нужно поддерживать порядок (он должен быть как 32,43, а не как 43,32)
Пожалуйста, помогите
Комментарии:
1. Если я правильно понимаю, тогда используйте
GROUP_CONCAT(price ORER BY FIND_IN_SET(sizes.id, size_categories.size_id))
и удалите лишний столбец из ГРУППЫ ПО выражению.2. я удалил
group by product_prices.price
и добавилGROUP_CONCAT(price ORDER BY FIND_IN_SET(sizes.id, size_categories.size_id))
, что он показывает цену, подобную43,32,43,32
и sizes_name, как2m,2m,3m,3m
в одной строке3. Каждая пара предложений (цена, размер) уникальна, все кажется логически правильным.
4. Вы установили только частичное отношение для
product_prices
. Он не учитывает связь между ценой и размером. См. скрипку5. PS. Я думаю, что DISTINCT в GROUP_CONCAT теперь является избыточным…