2011-08-11 51 views
1

這裏是第1部分:MySQL: how to convert to EAV?MySQL:如何轉換爲EAV - 第2部分?

現在我想也做一些不同的事情。說我有如下表:

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 | 
------------------------------------- 

假設attributevalue已定義的表。如何將表one中的數據插入到兩個目標表中。對我來說,一個大問題是如何獲得關係(attribute.id =>value.attribute_id)是正確的。

+0

以下是您的問題 - 您是否仍然覺得值得轉移到?! – zerkms

+0

我正在做這個測試。如果我還有問題,我不會起訴。我試圖弄清楚我將來是否會遇到問題。現在,我只需要在這些不同的EAV模型中轉換我的數據,這樣我就可以運行一些測試。 – StackOverflowNewbie

+0

你甚至還沒有開始使用它,但你已經有問題...對於我自己,我決定再也不使用EAV – zerkms

回答

1
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 ;