2016-01-08 2 views
0

J'ai une table comme ceci:Comment créer une rangée séparée à partir des champs dans une rangée?

// mytable 
+----+--------+--------+ 
| id | col1 | col2 | 
+----+--------+--------+ 
| 1 | one | two | 
| 2 | three | four | 
| 3 | five | six | 
+----+--------+--------+ 

Maintenant, je veux ce tableau:

// newmytable 
+----+-------+---------+ 
| id | col | related | 
+----+-------+---------+ 
| 1 | one | 1  | 
| 2 | two | 1  | 
| 3 | three | 2  | 
| 4 | four | 2  | 
| 5 | five | 3  | 
| 6 | six | 3  | 
+----+-------+---------+ 

Je peux le faire sans cette colonne comme related ceci:

CREATE TABLE newmytable (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    SELECT col1 AS col FROM mytable 
     UNION ALL 
    SELECT col2 AS col FROM mytable 
) 

Mais maintenant je veux savoir, comment puis-je faire cela contenant related colonne?

+0

Quelle valeur entreposez-vous dans la colonne 'related'? –

+0

@SameerMirji Un nombre identique pour les champs dans une ligne identique. – Shafizadeh

Répondre

1

Vous pouvez utiliser id pour remplir la colonne related comme ceci:

CREATE TABLE newmytable (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY) 
    SELECT col, related FROM (
      SELECT col1 AS col, id as related, 0 sort FROM mytable 
       UNION ALL 
      SELECT col2 AS col, id as related, 1 sort FROM mytable 
    ) x 
     ORDER BY x.related,x.sort ASC 

Demo

+0

désolé, difficile à dire avec juste voir le code. Pouvez-vous essayer de créer un exemple de travail dans sqlFiddle? Quelque chose comme http://sqlfiddle.com/#!9/95dff –

+0

quelque chose comme ça: http://sqlfiddle.com/#!9/3ac414/2 – Shafizadeh

+0

ne pas maintenant cette façon de créer une table, mais ressemble à votre problème résoudre maintenant, n'est-ce pas? –