Help. Выгрузить данные из MYSQL

xpycteamset
На сайте с 05.10.2009
Offline
129
1123

Товарищи, прошу направить на путь истинный.

Есть таблица

Товар|Характеристика|Значение
Телевизор1|Ширина|100
Телевизор1|Высота|100
Телевизор1|Диаметр|15

Телевизор2|Высота|120
Телевизор2|Диаметр|110

Телевизор3|Ширина|120
Телевизор3|Высота|100
Телевизор3|Диаметр|12
Телевизор3|Вес|5

Требуется пересобрать в следующий вид

Товар|Ширина|Высота|Диаметр|Вес
Телевизор1|100|100|15|
Телевизор2| |120|11 |
Телевизор3|120|100|12|5

Каким образом такое провернуть?

Kot Matroskin
На сайте с 29.08.2007
Offline
185
#1
Каким образом такое провернуть?

Написать на php скриптик который создаст новую таблицу.

Я пользовался 11 разными хостингами. Есть только один ЛУЧШИЙ: ★ он тут ★ (https://goo.gl/R6v3zH) Пишите в ЛС за скидкой. VPS тоже в наличие ! Рекомендую.
xpycteamset
На сайте с 05.10.2009
Offline
129
#2

Kot Matroskin

Это то понятно что скриптик написать.

Но третий день, не могу допереть что/куда.

Если на пальцах показать что куда, буду благодарен.

Samail
На сайте с 10.05.2007
Offline
361
#3

Наверное, создать таблицу. Из старой извлечь все названия товара, убрать дубли, добавить в таблицу строки с названиями (остальные поля пустые). Потом извлекать из старой строки у которых Характеристика==Ширина и вставлять из них значение в новую таблицу в строку у которой товар равен товару текущей строки. То-же самое проделать с остальными характеристиками.

A
На сайте с 19.07.2010
Offline
130
#4

можно это сделать одним SQL запросом:

select `Товар`
, max(IF(`Характеристика`='Ширина', `Значение`, 0)) as `Ширина`
, max(IF(`Характеристика`='Высота', `Значение`, 0)) as `Высота`
, max(IF(`Характеристика`='Диаметр', `Значение`, 0)) as `Диаметр`
, max(IF(`Характеристика`='Вес', `Значение`, 0)) as `Вес`
from table1
group by `Товар`

Чтобы записать результат в другую таблицу, добавьте вначале запроса строку:

insert into table2

понятно, что table2 должна существовать.

.............
Оптимизайка
На сайте с 11.03.2012
Offline
396
#5

Это называется pivot table, к сожалению в MySQL только как-то так:

http://buysql.com/mysql/14-how-to-automate-pivot-tables.html

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
A
На сайте с 19.07.2010
Offline
130
#6

Оптимизайка, да Вы правы, в данном случае нужно sum заменить на max.

Kot Matroskin
На сайте с 29.08.2007
Offline
185
#7
xpycteamset:
Kot Matroskin
Это то понятно что скриптик написать.
Но третий день, не могу допереть что/куда.
Если на пальцах показать что куда, буду благодарен.

Я к тому, что обычно на sql чуть сложнее и может вам оптимальнее и проще сделать посредством php.

Посмотрите туртоилы, там только выгрузка загрузка в БД и if'ы.

xpycteamset
На сайте с 05.10.2009
Offline
129
#8

admak

Спасибо, поставил заменил на MAX в вашем примере и все получилось.

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