来自变量的mysql字段名称
是否可以选择字段名称是字符串?来自变量的mysql字段名称
SELECT 'fieldname' FROM table
我需要这个触发器具有动态字段名 像
SET fieldname = NEW.`name`;
UPDATE table SET fieldname = 1 ;
如果字符串是在外部应用程序(如PHP),当然,只是构建了MySQL的声明。
如果字符串在MySQL表内,则不能。 MySQL没有eval()或这样的函数。以下是不可能的:
假设您有一个表“查询”,其字段“columnname”引用了表“mytable”中的一个列名。有可能是其他列在“查询”,让您选择您想要的列名...
INSERT INTO queries (columname) VALUES ("name")
SELECT (select columnname from queries) from mytable
但是,您可以用PREPARED STATEMENTS工作。请注意,这很不方便。
SELECT columnname from queries into @colname;
SET @table = 'mytable';
SET @s = CONCAT('SELECT ',@colname,' FROM ', @table);
PREPARE stmt FROM @s;
EXECUTE stmt;
准备好的语句不允许在触发器内... – samrockon 2010-12-13 13:01:52
大概晚了一点在派对上,但是到底是什么......你提到这种行为非常黑客。但是,你能解释一下为什么?因为这个解决方案对我有很大帮助,但我不想依赖于不稳定的修复。 – mahulst 2012-03-15 12:23:43
由于代码不使用简单的SQL功能(因为这些功能不存在),因此该代码很晦涩难懂。但别担心,它是稳定的,不会在你身上发生。到十分钟前,我正在生产中使用它! – dotancohen 2012-08-06 11:39:38
如果要选择多列:
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;
我不明白你的意思 – 2010-12-13 12:26:56
你是如何运行的SQL?阅读动态SQL。 – 2010-12-13 12:27:49
名称为“字符串”的字段? 'SELECT \'string \'FROM \'table \''? – jwueller 2010-12-13 12:29:46