是否可以选择名称为字符串的字段?
从表中选择“字段名”
从表
我需要这个触发器才能具有动态字段名称 类似的东西
SET fieldname = NEW.`name`; UPDATE table SET fieldname = 1 ;
正如这些正确答案的提示一样,您也可以在存储过程中执行此操作,这在 MySQL 8x 社区中非常适合我:
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `SP_LIST_COLLECTORS`( IN P_email VARCHAR(60),#Admin email IN P_password_hash VARCHAR(255),#Admin hash IN P_filter_field VARCHAR(80), IN P_filter_value VARCHAR(255) ) BEGIN DECLARE V_filter_field VARCHAR(80); SET V_filter_field = P_filter_field; BEGIN GET DIAGNOSTICS CONDITION 1 @ERRNO = MYSQL_ERRNO, @MESSAGE_TEXT = MESSAGE_TEXT; SELECT 'ERROR' AS STATUS, CONCAT('MySQL ERROR: ', @ERRNO, ': ', @MESSAGE_TEXT) AS MESSAGE; END; SET @statement = CONCAT('SELECT collector_id, email, address, post_code, phone, alt_phone, contact_name FROM collectors_table WHERE ',P_filter_field, '=\'', P_filter_value, '\';'); #SELECT collector_id, email, address, post_code, phone, alt_phone, contact_name FROM collectors_table WHERE (V_filter_field) = P_filter_value; PREPARE stmnt FROM @statement; EXECUTE stmnt; END
如果该字符串位于您的外部应用程序(例如 PHP)中,当然,只需构造 MySQL 语句即可。
如果字符串位于 MySQL 表内,则不能。 MySQL 没有 eval() 或此类函数。以下是不可能的:
假设您有一个表 queries,其中的字段 columnname 引用表 mytable 中的列名称之一。 查询中可能有其他列,允许您选择所需的列名。
queries
columnname
mytable
查询
列名
INSERT INTO queries (columname) VALUES ("name") SELECT (select columnname from queries) from mytable
但是,您可以使用准备好的语句.请注意,这非常 hacky。
SELECT columnname from queries into @colname; SET @table = 'mytable'; SET @s = CONCAT('SELECT ',@colname,' FROM ', @table); PREPARE stmt FROM @s; EXECUTE stmt;
正如这些正确答案的提示一样,您也可以在存储过程中执行此操作,这在 MySQL 8x 社区中非常适合我:
如果该字符串位于您的外部应用程序(例如 PHP)中,当然,只需构造 MySQL 语句即可。
如果字符串位于 MySQL 表内,则不能。 MySQL 没有 eval() 或此类函数。以下是不可能的:
假设您有一个表
queries
,其中的字段columnname
引用表mytable
中的列名称之一。查询
中可能有其他列,允许您选择所需的列名
。但是,您可以使用准备好的语句.请注意,这非常 hacky。