Запрос Mysql для группировки по полям

shadowrun

Постоялец
Регистрация
13 Июл 2011
Сообщения
203
Реакции
141
Есть таблица где хранятся характеристики товара. Селект на текущий момент выводит примерно таким образом:
Id товара // название товара // ID поля // Значение поля

651 // Товар 1 // 579 // 38х36,5х142
651 // Товар 1 // 549 // пластик, дерево
651 // Товар 1 // 578 // красный
651 // Товар 1 // 577 // 500 грамм
652 // Товар 2 // 579 // 38х36,5х142
652 // Товар 2 // 549 // пластик, металл

Подскажите пожалуйста каким образом можно сгруппировать по ID товара, а значения характеристик вывести в разные колонки?
Чтобы было примерно так:
Id товара // название товара // field_579 // field_549 // field_578 // field_577

651 // Товар 1 // 38х36,5х142 // пластик, дерево // красный // 500 грамм
652 // Товар 2 // 38х36,5х142 // пластик, металл

Если можно то пример скиньте
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Сделать как ты хочешь можно через Join для каждого типа поля... Но это не правильно...
Корректнее выбирать всю таблицу и проходить в цикле по полям и уже средствами PHP делать из таблицы строку.

P.s. чисто моё мнение
 

shadowrun

Постоялец
Регистрация
13 Июл 2011
Сообщения
203
Реакции
141
А примерчик или хотя-бы принцип как это можно сделать на пыхе?
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
Обычный цикл while для получения значений из MySQL - стандартно.
А внутри делаешь:

$info[$row['field_id']] = $row['field_value'];

В результате имеешь массив $info, где каждому ID поля соответствует его значение...
 

shadowrun

Постоялец
Регистрация
13 Июл 2011
Сообщения
203
Реакции
141
Обычный цикл while для получения значений из MySQL - стандартно.
А внутри делаешь:

$info[$row['field_id']] = $row['field_value'];

В результате имеешь массив $info, где каждому ID поля соответствует его значение...
Спасибо буду пробовать
 

newminer

Создатель
Регистрация
21 Апр 2015
Сообщения
15
Реакции
4
Если делать именно запросом mysql то это возможно, только если количество id поля определено
Запрос будет содержать:
select p.id, p.name, h1.har_id, h1.har_value, h2.har_id, h2.har_value ...
from products p
left join harakteristiks h1 on p.id=h1.product_id and h1.har_id=579
left join harakteristiks h2 on p.id=h2.product_id and h2.har_id=549
...
 

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.523
@newminer, не любишь ты сервера MySQL... Зачем так нагрузку увеличивать?
Нет, технически это правильно...
Но мой вариант позволяет выгружать только заполненные поля, рассчитан на изменение количества полей...
Твой вариант генерирует временную таблицу + сканирует одну таблицу множество раз, что увеличивает нагрузку и время ответа...
 

markdorcel

Писатель
Регистрация
26 Фев 2019
Сообщения
3
Реакции
0
А что у вас за движок? Схема данных явно кривая, если товаров с разнообразными модификациями миллионы то таблица будет переполнена дублирующей информацией. Я бы посоветовал миграцию на новую схему и перебрать текущие данные в ходе миграции.
 

shadowrun

Постоялец
Регистрация
13 Июл 2011
Сообщения
203
Реакции
141
А что у вас за движок? Схема данных явно кривая, если товаров с разнообразными модификациями миллионы то таблица будет переполнена дублирующей информацией. Я бы посоветовал миграцию на новую схему и перебрать текущие данные в ходе миграции.
Движок UmiCMS версия 2.9 (довольно старая). В последних версиях база уже приведена в нормальный вид
 

markdorcel

Писатель
Регистрация
26 Фев 2019
Сообщения
3
Реакции
0
Ну тогда нужна только адекватная миграция, ПХП поможет, если не осилить ПХП то можно даже Ексель заюзать для такого))
 
Сверху