suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Schreiben Sie den Titel um: MySQL-Feldnamen mithilfe von Variablen abrufen

Ist es möglich, ein Feld mit einem Zeichenfolgennamen auszuwählen?

Wählen Sie „Feldname“ in

从表

Ich brauche diesen Trigger, um dynamische Feldnamen zu haben Etwas Ähnliches

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


P粉237647645P粉237647645406 Tage vor693

Antworte allen(2)Ich werde antworten

  • 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

    Antwort
    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;

    Antwort
    0
  • StornierenAntwort