Можно ли выбрать поле, имя которого является строкой?
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;