Maison >base de données >tutoriel mysql >L'instruction Select de MySQL peut-elle utiliser et redéfinir de manière fiable les variables utilisateur au sein d'une seule instruction ?
Définir et utiliser des variables dans une instruction Select
Dans MySQL, il n'est généralement pas conseillé d'attribuer des valeurs aux variables utilisateur et de lire ces valeurs dans la même déclaration. Bien qu'il puisse sembler fonctionner dans certains scénarios, ce comportement n'est pas garanti et peut varier en fonction des éléments spécifiques de l'instruction et de la version du serveur MySQL.
Par exemple, considérons l'instruction suivante :
SELECT @z:=SUM(item), 2*@z FROM TableA;
Dans ce cas, le résultat attendu serait que la deuxième colonne renvoie la valeur de 2 multipliée par la somme de la colonne élément. Cependant, MySQL peut évaluer l'instruction dans un ordre différent, ce qui entraîne une valeur NULL pour la deuxième colonne.
La raison derrière ce comportement est que MySQL ne garantit pas l'ordre d'évaluation des expressions impliquant des variables utilisateur. En modifiant légèrement l'instruction, par exemple en introduisant une clause GROUP BY, l'ordre d'évaluation peut changer.
Cependant, il existe une solution de contournement pour obtenir la fonctionnalité souhaitée en utilisant une sous-requête :
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
Dans cette sous-requête, la variable @z se voit attribuer la somme de la colonne d'éléments puis est sélectionnée avec sa valeur doublée. Cette approche garantit que la valeur de la variable est correctement évaluée et utilisée dans la deuxième colonne.
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!