2009-03-01 7 views
2

Tout le monde connaissant la commande mysql_query de php, sait qu'elle ne nous permet pas d'effectuer plus d'une requête (séparée par le délimiteur;) en un seul appel ...Exécuter UPDATE et définir une variable utilisateur en une seule requête

Mon problème est que je ne serais pas capable de définir une variable utilisateur dans ma requête UPDATE de sorte que je l'incrémente pour chaque ligne (un peu comme l'incrémentation automatique). Il devrait ressembler à quelque chose comme ceci:

SET @t1=0; 
UPDATE `mytable` SET `order` = (@t1:=(@t1+1)) ORDER BY `order` ASC; 

Mon problème est que, puisque je ne peux pas définir ma variable et ensuite faire la mise à jour, je ne peux pas trouver un moyen de définir la variable dans la requête. J'ai essayé de définir si elle était NULL:

... `order` = (IFNULL(@t1 := (@t1 + 1) , @t1 := 0)) ... 

mais il n'a pas travaillé depuis la variable remet à zéro à chaque ligne il fonctionne sur.

Quelqu'un qui connaît mysql et qui voit une solution? Merci d'avance.

Répondre

1

Vous pouvez utiliser la bibliothèque mysqli, il permet de multiples querys dans une requête en utilisant la

mysqli->multiple_query(string $querys); 

http://us.php.net/mysqli_multi_query

0

Sortir sur une branche, que diriez-vous ...

 
... `order` = (SELECT `order`+1 FROM `mytable` ORDER BY `order` DESC LIMIT 1) 

ou quelque chose comme ça en tant que sous-requête? ... Je ne suis pas sûr que la sous-requête ré-exécute après chaque mise à jour, mais si c'est le cas, elle doit sélectionner la plus haute order valeur et l'augmenter?

3

question ancienne, mais voici une réponse de toute façon:

UPDATE `mytable` SET `order` = (@t1 := IFNULL(@t1, 0) + 1) ORDER BY `order` ASC; 

IFNULL(@t1, 0) retourne 0 si @t1 n'a pas de valeur ou renvoie la valeur de @t1 si elle a une valeur.

Sur la première ligne, @t1 n'est pas définie et se met à jour en tant que order = (@t1 := 0 + 1) et sur les lignes suivantes @t1 a déjà une valeur et ajoute +1 chaque ligne.

+0

Yeppeee. Merci beaucoup et beaucoup de coups de poing (y). – NullPointer

Questions connexes