MySQL的选择列名作为场(MySQL select column name as field)

2019-06-27 22:19发布

我有一个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

我将需要使用制定这样的查询?

非常感谢

Answer 1:

这就是所谓的支点。 其实这是一个反向旋转。 看到这里的一些背景。 http://www.artfulsoftware.com/infotree/queries.php#78

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


Answer 2:

你可以不喜欢这样,这将返回给你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');       


文章来源: MySQL select column name as field
标签: mysql pivot