8

我有一个看起来像这样的 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

我需要用什么来制定这样的查询?

非常感谢

4

2 回答 2

9

这称为枢轴。其实这是一个逆向旋转。有关一些背景信息,请参见此处。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
于 2012-09-06T11:54:45.560 回答
4

您可以这样做,这将返回给您以 2 逗号分隔的第一个列第二个值,您可以将其分解并合并到 PHP 中的 KEY/VALUE 数组中。

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');       
于 2012-09-06T11:56:52.573 回答