views:

15

answers:

1

Is it possible to set an user variable based on the result of a query in MySQL?

What I want to acheive is something like this (we can assume that both USER and GROUP are unique):

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

Please note that I know its possible but I do not wish to do this with nested queries.

A: 

Yes, but you need to move the variable assignment into the query:

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

Test case:

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

Result:

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)

Note that for SET, either = or := can be used as the assignment operator. However inside other statements, the assignment operator must be := and not = because = is treated as a comparison operator in non-SET statements.


UPDATE:

Further to comments below, you may also do the following:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;
Daniel Vassallo
Lovely, just lovely. Thanks!
Avada Kedavra
Btw, could you suppress the output of the first statement (as its only variable assignment) and only show the output of the second query?
Avada Kedavra
@Avada: Updated my answer with an alternative, which doesn't output a result for the variable assignment.
Daniel Vassallo
Spot on Daniel. Thanks!
Avada Kedavra