Одна строка много колонок inner join

201
14 сентября 2017, 16:01

Имеется следующая структура таблиц.

**Products:**
  -id
  -title
  -price
**Equipments**
  -id
  -title
**Eqvalues**
  -id
  -equipment_id
  -value
**Equipment_product_value**
  -id
  -product_id
  -equipment_id
  -value_id

Хочу вывести данные в формате.

|products.title|products.price|equipments.title-1|eqvalues.value-1|equipments.title-N|eqvalues.value-N

Простыми словами, у товара есть характеристики (equipments) и значения этих характеристик (values) которые нужно вывести. Возможно ли так сделать. Моя часть реализации:

SELECT products.id, products.title, products.status, products.price, products.info, 
                         product_photo.filename, equipments.title AS etitle, values.value
                 FROM products
                 INNER JOIN product_photo ON products.id = product_photo.product_id 
                 INNER JOIN equipment_product ON products.id = equipment_product.product_id 
                 INNER JOIN equipments ON equipment_product.equipment_id = equipments.id
                 INNER JOIN `values` ON equipment_product.value_id = values.id
                 GROUP BY products.id
Answer 1

Похоже у вас MySQL.

В общем случае нельзя вывести в несколько столбцов каждое свойств. Вы ведь не знаете изначально сколько всего может быть строк.

Зато можно вывести все свойства товара в одном столбце с разделителем |, с помощью функции GROUP_CONCAT:

SELECT products.id, products.title, products.status, products.price, products.info, 
                         product_photo.filename, 
                         GROUP_CONCAT( DISTINCT
                            CONCAT(equipments.title, '|', values.value) 
                            ORDER BY equipments.title 
                            SEPARATOR '|'
                        ) AS prodInfo
                 FROM products
                 INNER JOIN product_photo ON products.id = product_photo.product_id 
                 INNER JOIN equipment_product ON products.id = equipment_product.product_id 
                 INNER JOIN equipments ON equipment_product.equipment_id = equipments.id
                 INNER JOIN `values` ON equipment_product.value_id = values.id
                 GROUP BY products.id
READ ALSO
Объединить запросы к разным таблицам MySQL

Объединить запросы к разным таблицам MySQL

Есть 1 запрос, который получает информацию о пользователе по его username:

274
расширения стандартных таблиц в wordpress

расширения стандартных таблиц в wordpress

Cтоит ли вносить изменения в структуру таблицы wp_posts, так как по данным добавленным полям будет идти постоянно поиск и данные поля будут присутствовать...

230
Чем отличаются расширения java и jar?

Чем отличаются расширения java и jar?

Чем отличаются расширенияjava и

237
Изменение размера элемента в JavaFX [требует правки]

Изменение размера элемента в JavaFX [требует правки]

Как можно изменить размер объекта (например кнопки) в JavaFX?

232