Выборка из ненормализованной БД MySQL

S
На сайте с 08.01.2012
Offline
53
498

Есть бд в которой названия, характеристики и атрибуты товаров хранятся в 1 таблице objects

Тоесть:

id // name // type_id

10000 // название товара // 1

10500 // красный // 2

10600 // пластик // 3

Разница только в type_id (у всех товаров он одинаковый)

Есть еще такая таблица object_content

obj_id // value

10000 // 10500

10000 // 10600 ( где первое значение это id товара, второе значение это уже сама характеристика )

В общем затык такой как вывести

id // товар // цвет // материал

Тоесть:

10000 // название товара // красный // пластик

Понимаю что по идее нужно через inner_join делать, но чтото видимо гдето косячу.

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

Вопрос решен.

если мало ли кому то понадобится - то вот решение (на пример моих таблиц)

SELECT

o2.id,

o2.name,

t.attr AS color,

t2.attr AS material

FROM cms3_objects o2

INNER JOIN (SELECT

c.obj_id AS id,

o.name AS attr

FROM cms3_object_content c

INNER JOIN cms3_objects o

ON c.rel_val = o.id

AND o.type_id = 154) t

ON o2.id = t.id

INNER JOIN (SELECT

c.obj_id AS id,

o.name AS attr

FROM cms3_object_content c

INNER JOIN cms3_objects o

ON c.rel_val = o.id

AND o.type_id = 155) t2

ON o2.id = t2.id

S
На сайте с 30.09.2016
Offline
469
#2
shadowrun:
если мало ли кому то понадобится - то вот решение

Никому не показывайте такое решение. Сотрите его поскорее, пока никто не увидел.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
S
На сайте с 08.01.2012
Offline
53
#3
Sitealert:
Никому не показывайте такое решение. Сотрите его поскорее, пока никто не увидел.

Ну лучше вариантов пока нету:(

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

Вот нашел интересное решение через представления

http://stratosprovatopoulos.com/web-development/mysql/pivot-a-table-in-mysql/

Этот вариант работает гораздо быстрее

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