Comment définir une variable tout en faisant une déclaration de mise à jour? Je n'arrive pas à comprendre la syntaxe.
Donc, je veux quelque chose comme ceci ci-dessous, mais il est dit que la syntaxe est fausse:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
C'est possible :-
UPDATE myTable SET col1 = 5,
col2 = (@tempVariable:=@tempVariable+1) // to increment
Pour définir un entier (pas d'incrément)
UPDATE myTable SET col1 = 5,
col2 = (@tempVariable:=100) // to assign any integer
Si vous voulez obtenir quelque chose comme ça:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
Vous pouvez faire un truc comme ça:
ALTER TABLE Proj ADD col3 numeric;
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;
ALTER TABLE Proj DROP col3;
De cette manière, vous pouvez affecter des valeurs à une variable sans modifier les attributs d'une table. C'est vraiment utile pour définir des valeurs dinamiques.
PAR EXEMPLE: @tempVariable := @otherVariable + 100;
La clé est l'opérateur ": =". Variable utilisateur MySQL
Vous pouvez également affecter une valeur à une variable utilisateur dans les instructions other que SET. Dans ce cas, l'opérateur d'affectation doit être: = et non = car ce dernier est traité comme l'opérateur de comparaison = dans non-SET déclarations:
1 Utilisez celle de la colonne de mise à jour
SET @tempVariable := 0;
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col3 = @tempVariable := col2 + 1;
@tempVariable est toujours 100 et col3 sera toujours 101. Il semblerait que MySQL utilisera la nouvelle valeur affectée au lieu de la valeur d'origine dans la table. Ceci est différent de MS SQL. Pour plus de clarté, essayez l'exemple suivant, la valeur sera 1001 pour col3 et @tempVariable.
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col2 = 1000
col3 = @tempVariable := col2 + 1;
2 Utilisez une autre colonne du tableau que la colonne de mise à jour.
UPDATE myTable
SET col1 = 5,
col2 = @tempVariable := 100,
col3 = @tempVariable := col4 + 1;
@tempVariable et col3 auront la même valeur. Ils seront la valeur d'origine col4 + 1.
J'ai testé une requête similaire à l'aide d'une sélection et cela a fonctionné pour moi, donc je réécrirais votre requête comme suit
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);
J'espère que cela pourra aider.
J'ai utilisé php ou coldfusion pour faire quelque chose comme ça, (exemple php)
function something($param){
$localVarCleaned = mysql_real_escape_string($param);
mysql_query("
UPDATE tablename
SET col = ".$localVarCleaned."
");
}