获取以列名作为变量的列 mysql 的值

get value of a column mysql with column name as variable

我想转置 table 的一行。

例如,如果我有一个 "Persons" table 属性为 "ID"、"First Name"、"Last Name"、"Age",我想要将 "Persons" table 中的一行转置为以下两列:

Column_name、Column_value

我可以使用以下方法获取 table 的列名:

SELECT *
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='databasename'
AND `TABLE_NAME`='tablename';

我尝试使用以下方法获取列名的值:

select attributes.`COLUMN_NAME`, person.attributes.`COLUMN_NAME` as `Column_Value`
from (select * from Persons where ID=1) as person,
(SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='databasename' and `TABLE_NAME`='tablename');

但是第二个参数也给出了列名而不是值。

如何解决这个问题。

您可以使用带有准备语句的存储过程

DROP PROCEDURE IF EXISTS proc;
DELIMITER $$
CREATE PROCEDURE proc()
BEGIN
  DECLARE query longtext;
  SELECT
    GROUP_CONCAT( CONCAT("(select '",column_name,"' as     col_name,",concat("person.",column_name)," as col_val
    FROM (select * from test.game_action where id=1) as person,(SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='test' and `TABLE_NAME`='game_action')as t)")  SEPARATOR ' union ') into query
  FROM (select * from test.game_action where id=1) as person,(SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` 
  WHERE `TABLE_SCHEMA`='test' and `TABLE_NAME`='game_action')as t;

 SET @s = query;
 PREPARE stmt FROM @s;
 EXECUTE stmt;
 DEALLOCATE PREPARE stmt;
END

如果需要,您可以将 id 作为参数传递