Reputation: 22233
I have a table
scores(user, score)
and I have this query
SET @row_num = 0;
SELECT @row_num := @row_num + 1 as row_index, user, score
FROM scores ORDER BY score DESC
now I want to select, from this query result, the user with name 'john' and score '1400' to know what is his row_index, something like
SELECT row_index
FROM *result* WHERE user='john' AND score=1400
how do I do that? I tried
SET @row_num = 0;
SELECT row_index
FROM (SELECT @row_num := @row_num + 1 as row_index, user, score
FROM scores ORDER BY score DESC)
WHERE user='john' AND score=1400`
but phpMyAdmin says
#1248 - Every derived table must have its own alias
How can I do that?
Thank you, Alessandro
Upvotes: 1
Views: 105
Reputation: 1944
Try this:
SET @row_num = 0;
SELECT row_index FROM (SELECT @row_num := @row_num + 1 as row_index, user,
score FROM scores ORDER BY score DESC) AS alias1 WHERE user='john' AND score=1400
Upvotes: 1
Reputation: 9724
Query:
SET @row_num = 0;
SELECT a.row_index
FROM (SELECT @row_num := @row_num + 1 as row_index,
user,
score
FROM scores ) a
WHERE a.user='john' AND a.score=1400
ORDER BY a.score DESC
I think Ordering in Subquery not always allowed.
Upvotes: 2
Reputation: 321
Try to use views.
SET @row_num = 0;
CREATE VIEW v AS SELECT @row_num := @row_num + 1 as row_index, user, score FROM scores ORDER BY score DESC;
SELECT row_index FROM v;
Upvotes: 1
Reputation: 34055
You haven't added an alias to the derived table.
SELECT row_index FROM (...) AS alias
WHERE alias.user = 'john' AND alias.score = 1400
Upvotes: 2