Имя поля mysql из переменной

Можно ли выбрать поле, имя которого является строкой?

SELECT 'fieldname' FROM table

Мне нужно, чтобы для триггера были имена динамических полей что-то вроде

SET fieldname = NEW.`name`;
UPDATE table SET fieldname = 1 ; 

Ответы

Ответ 1

Если строка находится во внешнем приложении (например, PHP), обязательно создайте инструкцию MySQL.

Если строка находится внутри таблицы MySQL, вы не можете. MySQL не имеет eval() или такой функции. Невозможно следующее:

Предположим, что у вас есть "запросы" таблицы с полем "имя столбца", которое относится к одному из имен столбцов в таблице "mytable". В "запросах" могут быть дополнительные столбцы, которые позволяют вам выбрать нужное имя столбца...

INSERT INTO queries  (columname) VALUES ("name")
SELECT (select columnname from queries) from mytable

Однако вы можете работать с ПОДГОТОВЛЕННЫЕ ЗАЯВЛЕНИЯ. Помните, что это очень хаки.

SELECT columnname from queries into @colname;
SET @table = 'mytable';
SET @s = CONCAT('SELECT ',@colname,' FROM ', @table);

PREPARE stmt FROM @s;
EXECUTE stmt;

Ответ 2

Если вы хотите выбрать более одного столбца:

SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.`COLUMNS` C 
WHERE table_name = 'MyTb' AND COLUMN_NAME LIKE '%whatever%' INTO @COLUMNS;

SET @table = 'MyTb';
SET @s = CONCAT('SELECT ',@columns,' FROM ', @table);

PREPARE stmt FROM @s;
EXECUTE stmt;