2011-08-11 2 views
3

Dire que j'ai le tableau suivant:MySQL: comment convertir en EAV?

TABLE: one 
=============================== 
| id | first_name | last_name | 
=============================== 
| 1 | John  | Doe  | 
| 2 | Jane  | Smith  | 
------------------------------- 

Je veux le convertir en un EAV:

TABLE: two 
=================================== 
| id | fk_id | attribute | value | 
=================================== 
| 1 | 1  | first_name | John | 
| 2 | 1  | last_name | Doe | 
| 3 | 2  | first_name | Jane | 
| 4 | 2  | last_name | Smith | 
----------------------------------- 

Note:

  • valeurs two.fk_id provenaient de one.id
  • deux.les valeurs d'attribut provenaient de one.first_name
  • two.value v alues ​​est venu de one.last_name

J'ai besoin de créer la table deux de la table un afin que je puisse exécuter quelques tests.

Répondre

0

Je suppose que deux.id est un entier auto-incrémenté, donc je vais laisser à la table cible d'assigner ces valeurs.

select id as fk_id, 'first_name' as attribute, first_name as value 
from one 
union all 
select id as fk_id, 'last_name', last_name 
from one 
order by fk_id, attribute 
0

Pour l'amour de Dieu, n'utilisez pas EAV !!!! Si vous en avez besoin, utilisez plutôt une base de données NoSQL!

+7

Désolé, mais cette question n'a pas été laissée au sujet du pour et le contre de EAV. J'ai juste besoin de savoir comment convertir la première table en deux. – StackOverflowNewbie