2012-09-06 30 views
8

Ho una tabella mysql che sembra qualcosa di simile:MySQL selezionare il nome colonna come campo

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

Mi piacerebbe essere in grado di interrogare l'ID e ottenere più righe, una per ogni colonna. Per esempio:

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

Il che mi avrebbe dato:

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

cosa avrei bisogno di utilizzare per formulare una query come questa?

Molte grazie

risposta

8

Questo è chiamato un perno. In realtà è un perno inverso. Vedi qui per un po 'di background. http://www.artfulsoftware.com/infotree/queries.php#78

MySQL lo fa nel modo più difficile. È un dolore al collo. Molte persone che fanno un sacco di questo tipo di lavoro in MySQL utilizzano programmi per generare queste query.

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, questo è utile e probabilmente il modo migliore per farlo. :) Grazie per quello –

4

Si potrebbe fare in questo modo, questo tornerà a voi 2 separati da virgola prima di colonne secondo di valori, che si possono esplodere e unire in array chiave/valore nel 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

Grazie amico! :) –

+0

Appena aggiornato come hai accettato, posso riprenderlo alla vecchia revisione se ti è piaciuto meglio. :) – Kao

+2

Non mi preoccuperei. Ollie è più semplice, ma questo è più tecnico, quindi può essere utile ad altre persone che vengono qui. :) –

Problemi correlati