我有一个看起来像这样的mysql表:
id | col_1 | col_2 | col_3
---|-------|-------|------
1 | 2 | 34 | 64
2 | 6 | 53 | 23
我希望能够查询id并获取多行,每列一行。 E.g:
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
我需要用什么来制定像这样的查询?
非常感谢
答案 0 :(得分:8)
这称为枢轴。实际上它是一个反向支点。在这里查看一些背景信息。 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
答案 1 :(得分: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');