recherche

Maison  >  Questions et réponses  >  le corps du texte

Réécrivez le titre comme suit : Obtenez les noms de champs MySQL à l'aide de variables

Est-il possible de sélectionner un champ avec un nom de chaîne ?

Sélectionnez "Nom du champ" dans

从表

J'ai besoin de ce déclencheur pour avoir des noms de champs dynamiques Quelque chose de similaire

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


P粉237647645P粉237647645406 Il y a quelques jours690

répondre à tous(2)je répondrai

  • P粉986028039

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

    Comme ces réponses correctes le suggèrent, vous pouvez également le faire dans une procédure stockée, ce qui fonctionne très bien pour moi dans la communauté 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

    répondre
    0
  • P粉190443691

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

    Si la chaîne se trouve dans votre application externe (telle que PHP), bien sûr, construisez simplement l'instruction MySQL.

    Pas si la chaîne se trouve dans une table MySQL. MySQL n'a pas eval() ou de telles fonctions. Ce qui suit est impossible :

    Supposons que vous ayez une table queries,其中的字段 columnname 引用表 mytable 中的列名称之一。 查询中可能有其他列,允许您选择所需的列名.

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

    Cependant, vous pouvez utiliser des déclarations préparées< /a> Notez que c'est très hacky.

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

    répondre
    0
  • Annulerrépondre