是否可以選擇字段名稱是字符串?來自變量的mysql字段名稱
SELECT 'fieldname' FROM table
我需要這個觸發器具有動態字段名 像
SET fieldname = NEW.`name`;
UPDATE table SET fieldname = 1 ;
是否可以選擇字段名稱是字符串?來自變量的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