par
Nours312 » 19 mai 2010, 18:49
salut !...
bon, j'ai une solution avec une procédure stockée :: c'est peut-etre pas la meilleur, mais elle effectue ce que tu veux
la table que j'ai utilisé est la suivante ::
idTest var var2
1 1 1
2 2 1
3 11 1
4 15 1
5 9 1
6 7 1
7 13 1
8 6 1
et la procédure :
CREATE PROCEDURE `incre`()
BEGIN
DECLARE nb INT; /* variable qui contiendra la valeur à utiliser pour l'UPDATE */
DECLARE id INT; /* variable contenant l'idTest de la ligne qui nous intéresse */
SELECT MAX(var) INTO nb FROM test;
SELECT idTest INTO id FROM test ORDER BY var LIMIT 0,1;
UPDATE test SET var = (nb+1) WHERE idTest = id;
END;
je la fais fonctionner ainsi :
CALL incre();
et tu constatera qu'elle va effectuer le travaille demandé
si tu veux que la procédure te retourne l'id qui à été modifié, tu peux faire ça ::
CREATE PROCEDURE `incre`(OUT id INT)
BEGIN
DECLARE nb INT; /* variable qui contiendra la valeur à utiliser pour l'UPDATE */
SELECT MAX(var) INTO nb FROM test;
SELECT idTest INTO id FROM test ORDER BY var LIMIT 0,1;
UPDATE test SET var = (nb+1) WHERE idTest = id;
END;
avec comme commandes ::
CALL incre(@a);
SELECT @a ;
tu as toutes les explications sur
les procédures MySQL ici

Bon courage !
EDIT : oups, j'avais pas vu ta réponse, AB ...
salut !...
bon, j'ai une solution avec une procédure stockée :: c'est peut-etre pas la meilleur, mais elle effectue ce que tu veux :D
la table que j'ai utilisé est la suivante ::
[sql]
idTest var var2
1 1 1
2 2 1
3 11 1
4 15 1
5 9 1
6 7 1
7 13 1
8 6 1[/sql]
et la procédure :
[sql]CREATE PROCEDURE `incre`()
BEGIN
DECLARE nb INT; /* variable qui contiendra la valeur à utiliser pour l'UPDATE */
DECLARE id INT; /* variable contenant l'idTest de la ligne qui nous intéresse */
SELECT MAX(var) INTO nb FROM test;
SELECT idTest INTO id FROM test ORDER BY var LIMIT 0,1;
UPDATE test SET var = (nb+1) WHERE idTest = id;
END;[/sql]
je la fais fonctionner ainsi :
[sql]CALL incre();[/sql]
et tu constatera qu'elle va effectuer le travaille demandé ;)
si tu veux que la procédure te retourne l'id qui à été modifié, tu peux faire ça ::
[sql]CREATE PROCEDURE `incre`(OUT id INT)
BEGIN
DECLARE nb INT; /* variable qui contiendra la valeur à utiliser pour l'UPDATE */
SELECT MAX(var) INTO nb FROM test;
SELECT idTest INTO id FROM test ORDER BY var LIMIT 0,1;
UPDATE test SET var = (nb+1) WHERE idTest = id;
END;[/sql]
avec comme commandes ::
[sql]CALL incre(@a);
SELECT @a ;[/sql]
tu as toutes les explications sur [url=http://dev.mysql.com/doc/refman/5.0/fr/create-procedure.html]les procédures MySQL[/url] ici ;) Bon courage !
[b][u]EDIT : [/u] oups, j'avais pas vu ta réponse, AB ... [/b]