Sélection dynamique du nom de champ dans MySQL
Dans MySQL, est-il possible de sélectionner un champ en fonction d'un nom de champ dynamique stocké sous forme de chaîne ?
Question originale :
is it possible to select field which name is string? SELECT 'fieldname' FROM table i need this for trigger to have dynamic field names something like SET fieldname = NEW.`name`; UPDATE table SET fieldname = 1 ;
Réponse :
Est-il possible de sélectionner un champ de manière dynamique en fonction d'un La chaîne dépend de l'endroit où se trouve la chaîne.
Chaîne dans une application externe :
Si la chaîne du nom de champ se trouve dans votre application externe, la construction de l'instruction MySQL est simple.
Chaîne dans la table MySQL :
Cependant, si la chaîne du nom de champ est stockée dans une table MySQL, il est impossible de la sélectionner directement. MySQL n'a pas de fonction d'évaluation comme eval(). Cette opération n'est pas possible en utilisant l'approche suivante :
Suppose you have a table queries with a field columnname that refers to one of the column names in the table mytable. There might be additional columns in queries that allow you to select the columnname you want. INSERT INTO queries (columname) VALUES ("name") SELECT (select columnname from queries) from mytable
Utilisation d'instructions préparées :
En guise de solution de contournement, vous pouvez utiliser des instructions préparées, mais soyez prudent car c'est une approche hacky.
SELECT columnname from queries into @colname; SET @table = 'mytable'; SET @s = CONCAT('SELECT ',@colname,' FROM ', @table); PREPARE stmt FROM @s; EXECUTE stmt;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!