2012-09-06 17 views
8

que tiene una tabla de MySQL que se ve algo como esto:MySQL seleccione el nombre de columna como campo

id | col_1 | col_2 | col_3 
---|-------|-------|------ 
1 | 2  | 34 | 64 
2 | 6  | 53 | 23 

Me gustaría ser capaz de consultar en la identificación y obtener varias filas, una para cada columna. Por ejemplo:

SELECT column_name as column, column_value as value FROM my_table WHERE id=1; 

Qué me daría:

column | value 
-------|------- 
col_1 | 2 
col_2 | 34 
col_3 | 64 

¿Qué necesitaría utilizar para formular una consulta como esta?

Muchas gracias

Respuesta

8

Esto se llama pivote. En realidad, es un pivote inverso. Vea aquí para algunos antecedentes. http://www.artfulsoftware.com/infotree/queries.php#78

MySQL lo hace de la manera difícil. Es un dolor en el cuello. Muchas personas que hacen mucho de este tipo de trabajo en MySQL utilizan programas para generar estas consultas.

SELECT `column`, column_value 
    FROM (
    SELECT id, 'col_1' as `column`, col_1 as column_value FROM tab 
    UNION 
    SELECT id, 'col_2' as `column`, col_2 as column_value FROM tab 
    UNION 
    SELECT id, 'col_3' as `column`, col_3 as column_value FROM tab 
) pivot 
    WHERE id=1 
+0

Ah, eso es útil y, probablemente, la mejor manera de hacerlo. :) Gracias por eso –

4

Se podía hacerlo de esta manera, esto se volverá a vosotros 2 coma separa en primer lugar una de las columnas segunda de valores, que se puede explotar y fusionar en matrices clave/valor en PHP.

SELECT 
    GROUP_CONCAT(COLUMN_NAME) AS _columns, 
    (SELECT 
      GROUP_CONCAT(columnName, ',', columnName) 
     FROM table_name 
     WHERE id = 1) 
FROM 
    information_schema.columns 
WHERE 
    table_name = 'table_name' 
     AND COLUMN_NAME IN ('columnName' , 'columnName');  
+0

Gracias amigo! :) –

+0

Acabo de actualizar como lo aceptaste, puedo volver a la revisión anterior si te gustó más. :) – Kao

+2

No me preocuparía. El de Ollie es más sencillo, pero este es más técnico, por lo que puede ser útil para otras personas que vienen aquí. :) –

Cuestiones relacionadas