获取以列名作为变量的列 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 作为参数传递
我想转置 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 作为参数传递