226 votes

MySQL: Définir la variable utilisateur à partir du résultat de la requête

Est-il possible de définir une variable utilisateur basée sur le résultat d'une requête dans MySQL?

Voici ce que je veux réaliser (on peut supposer que USER et GROUP sont uniques):

 set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;
 

Veuillez noter que je sais que c'est possible mais je ne souhaite pas le faire avec des requêtes imbriquées.

376voto

Daniel Vassallo Points 142049

Oui, mais vous devez déplacer l'affectation de variable dans la requête:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

Cas de Test:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

Résultat:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)

Notez que pour l' SET, = ou := peut être utilisé comme l'opérateur d'affectation. Cependant à l'intérieur d'autres états, l'opérateur d'affectation doit être := et pas = car = est considéré comme un opérateur de comparaison dans d'autres états.


Mise à JOUR:

À la suite de commentaires ci-dessous, vous pouvez également effectuer les opérations suivantes:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X