MySQL选择列名作为字段

MySQL选择列名作为字段,mysql,pivot,Mysql,Pivot,我有一个mysql表,看起来像这样: id | col_1 | col_2 | col_3 ---|-------|-------|------ 1 | 2 | 34 | 64 2 | 6 | 53 | 23 我希望能够查询id并获得多行,每列一行。例如: SELECT column_name as column, column_value as value FROM my_table WHERE id=1; 这将给我: column | value ----

我有一个mysql表,看起来像这样:

id | col_1 | col_2 | col_3
---|-------|-------|------
1  | 2     | 34    | 64
2  | 6     | 53    | 23
我希望能够查询id并获得多行,每列一行。例如:

SELECT column_name as column, column_value as value FROM my_table WHERE id=1;
这将给我:

column | value
-------|-------
col_1  | 2
col_2  | 34
col_3  | 64
我需要使用什么来表达这样的查询


非常感谢

这被称为支点。实际上,这是一个反向枢轴。请参见此处了解一些背景信息

MySQL做得很辛苦。这是一件令人头痛的事。许多在MySQL中做大量此类工作的人使用程序生成这些查询

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

您可以这样做,它将返回2个逗号分隔的第一列和第二列的值,您可以在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');       

啊,这很有用,而且可能是最好的方法感谢您在接受时刚刚更新,如果您更喜欢的话,我可以把它带回旧版本。:)我不会担心的。奥利的更直接,但这一个更技术,所以可能对其他来这里的人有用。:)