2016-08-17 4 views
0

Я хочу перенести одну строку таблицы.получить значение столбца mysql с именем столбца как переменной

Например, если у меня есть таблица «Лица» с «Идентификатором», «Имя», «Фамилия», «Возраст» в качестве атрибутов, я хочу получить транспонирование строки в таблице «Лица» со следующими две колонки:

column_name, Column_value

я могу получить имена столбцов таблицы с помощью:

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'); 

Но второй параметр также дает имена столбцов вместо значений.

Как решить эту проблему.

+0

имен столбцов не являются данными, и это трудно сделать их в данные. тем не менее, связанные вопросы с правой стороны могут дать вам подсказку. Обычно нет оснований для этого делать на стороне базы данных, но, скорее всего, более полезно сделать это на стороне интерфейса/стороне кода. – Jakumi

ответ

0

Вы можете использовать хранимую процедуру с подготовленной инструкцией

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 

и вы можете передать идентификатор в качестве параметра, если вы хотите

+0

Я получаю синтаксическую ошибку с этим. – pkgajulapalli

+0

Вы можете отправить сообщение об ошибке @pkgajulapalli – Imanez

+0

Это просто показ «Есть ошибка SQL рядом с» – pkgajulapalli