Объединение групп Sql find_in_set не работает в запросе laravel

#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 теперь является избыточным…