Помогите составить запрос Mysql

12
S
На сайте с 08.01.2012
Offline
53
556

Есть таблица где хранятся характеристики товара. Селект на текущий момент выводит примерно таким образом:

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 // пластик, металл

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

vandamme
На сайте с 30.11.2008
Offline
646
#1

вряд ли такое можно осуществить простым запросом без всяких там процедур/функций, да и запрос будет весьма ресурсоемким.

на пыхе не вариант сделать?

I
На сайте с 15.03.2008
Offline
144
#2

+ за php реализацию

S
На сайте с 08.01.2012
Offline
53
#3

Можно и на пыхе. Только вот я знаю пых на начальном уровне совсем. Так что вопрос с пыхом будет идентичный

toxic steel
На сайте с 28.12.2007
Offline
162
#4

Угораете что ли? РНР будет менее ресурсоёмким, чем запрос к базе?

ТС, юзайте GROUP_CONCAT

Есть отличные, недорогие рекламные места на агрофоруме (http://farmerforum.ru/viewtopic.php?t=1725)! Клуб истинных ценителей денег (http://coinshunter.ru/).
I
На сайте с 15.03.2008
Offline
144
#5

toxic steel, покажите на примере кода ТС, нам всем будет полезным.

toxic steel
На сайте с 28.12.2007
Offline
162
#6

умение пользоваться гуглом в жизни пригодится гораздо больше, чем умение кляньчить "сделайте всё за меня"

S
На сайте с 08.01.2012
Offline
53
#7

Я не прошу сделать все за меня. Иначе бы я свой код скинул полностью.

Мне нужен либо принцип как это делать, либо пример какой-то близкий к теме.

Судя по гуглу GROUP_CONCAT объединяет все в 1 ячейке? Или все равно потом пыхом разбивать?

www.mysqltutorial.org/mysql-group_concat/

vandamme
На сайте с 30.11.2008
Offline
646
#8

toxic steel, не сильно знаком с мускулом, сенкс за идею

вот что получилось http://sqlfiddle.com/#!9/83de59/2

CREATE TABLE `mytbl` (

`id` int,
`Name` varchar(10),
`id_field` int,
`Value` varchar(50)
);

INSERT INTO `mytbl` (`id`, `name`,`id_field`,`value`) VALUES
(651,'Товар 1',549, 'Пластик, дерево'),
(651,'Товар 1',578, 'Красный'),
(652,'Товар 2', 577, '500 грамм'),
(652,'Товар 2', 549, 'Железо'),
(652,'Товар 2', 578, 'зеленый');

select id, group_concat(`Name` separator ',') as `Column`
from
(
select id, concat(`Name`, ': ',
group_concat(`Value` separator ', ')) as `Name`
from mytbl
group by id, `Name`
) tbl
group by id;

выход

id 	Column

651 Товар 1: Пластик, дерево, Красный
652 Товар 2: 500 грамм, Железо, зеленый
S
На сайте с 08.01.2012
Offline
53
#9

Спасибо за пример. Удалось повторить. Далее видимо все равно нужно в пхп делать

vandamme
На сайте с 30.11.2008
Offline
646
#10

можно упростить до


select id, concat(`Name`, ': ',
group_concat(`Value` separator ', ')) as `Name`
from mytbl
group by id;

toxic steel, все-таки не гуд этот вариант, конкатекация может произойти как угодно, а в пыхе можно отсортировать в каком порядке произойдет конкатекация

к примеру в интернет магазе правильнее будет краткая характеристика товара

Intel i7 3Ghz, 4 GB RAM, 500 GB HDD, GeForce GT 1030

но не

GeForce GT 1030, 4 GB RAM, 500 GB HDD, Intel i7 3Ghz

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий