首页  >  问答  >  正文

将标题重写为:使用变量获取MySQL字段名称

是否可以选择名称为字符串的字段?

从表中选择“字段名”

我需要这个触发器才能具有动态字段名称 类似的东西

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


P粉237647645P粉237647645335 天前635

全部回复(2)我来回复

  • P粉986028039

    P粉9860280392023-10-21 00:17:14

    正如这些正确答案的提示一样,您也可以在存储过程中执行此操作,这在 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

    回复
    0
  • P粉190443691

    P粉1904436912023-10-21 00:09:50

    如果该字符串位于您的外部应用程序(例如 PHP)中,当然,只需构造 MySQL 语句即可。

    如果字符串位于 MySQL 表内,则不能。 MySQL 没有 eval() 或此类函数。以下是不可能的:

    假设您有一个表 queries,其中的字段 columnname 引用表 mytable 中的列名称之一。 查询中可能有其他列,允许您选择所需的列名

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

    但是,您可以使用准备好的语句< /a>.请注意,这非常 hacky。

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

    回复
    0
  • 取消回复