SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.01.2017 11:51:02

M@xim
Участник
Зарегистрирован: 31.07.2014
Сообщений: 10

Прошу помощи с запросом из строк в столбцы с несколькими значениями

Приветствую.
Есть 2 таблицы:
tbl1
id | record_id
1  | 1
2  | 2
3  | 3
4  | 4
и
tbl2
id | record_id | field_key | field_value
1  | 1           |    sport    | 1
2  | 1           |    sport    | 2
3  | 2           |    sport    | 1
4  | 2           |    color    | 2
5  | 2           |    color    | 7
6  | 2           |    color    | 8
7  | 4           |    sport    | 1
8  | 4           |    sport    | 2
9  | 4           |    color    | 4
tbl1.record_id = tbl2.record_id
count(*) from tbl1 = 250000 строк
count(*) from tbl2 = 550000 строк
Количество возможных вариантов field_key = 16 (т.е. sport, color , ... , 16 шт.)
Каждый record_id может иметь от 0 до n field_key

Из этих двух таблиц нужно заполнить таблицу:
tbl3
id | record_id | field_sport | field_color | ...
1  | 1            | 1,2           | NULL
2  | 2            | 1             | 2,7,8
3  | 3            | NULL        | NULL
4  | 4            | 1,2           | 4

Первое, что пришло на ум - перебор tbl1 / INSERT в tbl3 всех возможных вариантов record_id / UPDATE значениями по field_key используя GROUP_CONCAT. Но при таком варианте update по 1 ключу занимает больше 5 часов. Может можно как-то заполнить tbl3 через один INSERT и при этом не ждать несколько дней?
Заранее спасибо.

Отредактированно M@xim (15.01.2017 11:55:52)

Неактивен

 

#2 15.01.2017 13:04:54

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Прошу помощи с запросом из строк в столбцы с несколькими значениями

select  record_id,
(select GROUP_CONCAT(field_value) from tbl2 y where field_key=sport and x.record_id=y.record_id) as field_sport, ... -- +ещё 15 аналогичных подзапросов
from tbl2 x
group by  record_id


если нужна 3-я таблица, то:
insert into tbl3 (record_id, field_sport, field_color, ...) select ... ;

для скорости желателен index (record_id, field_key, field_value)

Неактивен

 

#3 16.01.2017 11:38:55

M@xim
Участник
Зарегистрирован: 31.07.2014
Сообщений: 10

Re: Прошу помощи с запросом из строк в столбцы с несколькими значениями

Огромное спасибо!
Все идеально работает. Очень помог индекс по record_id.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson