MySQL: как конвертировать в EAV - часть 2? - PullRequest
1 голос
/ 12 августа 2011

Вот часть 1: MySQL: как конвертировать в EAV?

Теперь я хочу сделать что-то другое.Допустим, у меня есть следующая таблица:

TABLE: one
=======================================
| id | fk_id | attribute  | value     |
=======================================
| 1  | 10    | first_name | John      |
| 2  | 10    | last_name  | Doe       |
| 3  | 55    | first_name | Bob       |
| 4  | 55    | last_name  | Smith     |
---------------------------------------

Я хочу преобразовать ее в эту модель EAV:

TABLE: attribute
===================
| id | attribute  |
===================
| 1  | first_name |
| 2  | last_name  |
-------------------

TABLE: value
=====================================
| id | attribute_id | fk_id | value |
=====================================
| 1  | 1            | 10    | John  |
| 2  | 2            | 10    | Doe   |
| 3  | 1            | 55    | Bob   |
| 4  | 2            | 55    | Smith |
-------------------------------------

Предположим, что таблицы attribute и value уже определены.Как вставить данные из таблицы one в две целевые таблицы.Одна большая проблема для меня - как правильно установить отношения (attribute.id => value.attribute_id).

1 Ответ

1 голос
/ 12 августа 2011
INSERT INTO attribute
  (attribute)
SELECT DISTINCT
  attribute
FROM one ;

INSERT INTO value
  (attribute_id, fk_id, value)
SELECT 
  attribute.id, one.fk_id, one.value
FROM one
  JOIN attribute
    ON attribute.attribute = one.attribute ;
...