ゲームのランキングの生成に取り組んでいるときに、次のコードのようなクエリを作成しました (簡潔にするために多くの列が省略されています)。ランクが意味不明に見えることに気付きました (最初のクエリ)。ただし、gamenumber が参照されたテーブルを変更すると、正しい結果が生成されます (2 番目のクエリ)。
mysql> select @i:=@i+1 as rank, a.usernum, s.buildings from account_data as a, statistics as s join (select @i:=0) rank
where a.gamenumber=144 and a.usernum=s.usernum order by s.buildings desc limit 10;
+------+---------+-----------+
| rank | usernum | buildings |
+------+---------+-----------+
| 49 | 31071 | 87557 |
| 45 | 31047 | 86858 |
| 24 | 31064 | 84753 |
| 69 | 31089 | 79682 |
| 17 | 31103 | 76892 |
| 38 | 31106 | 66186 |
| 29 | 31053 | 65069 |
| 47 | 31081 | 59093 |
| 61 | 31036 | 58056 |
| 100 | 31061 | 56833 |
+------+---------+-----------+
10 rows in set (0.01 sec)
mysql> select @i:=@i+1 as rank, a.usernum, s.buildings from account_data as a, statistics as s join (select @i:=0) rank
where s.gamenumber=144 and a.usernum=s.usernum order by s.buildings desc limit 10;
+------+---------+-----------+
| rank | usernum | buildings |
+------+---------+-----------+
| 1 | 31071 | 87557 |
| 2 | 31047 | 86858 |
| 3 | 31064 | 84753 |
| 4 | 31089 | 79682 |
| 5 | 31103 | 76892 |
| 6 | 31106 | 66186 |
| 7 | 31053 | 65069 |
| 8 | 31081 | 59093 |
| 9 | 31036 | 58056 |
| 10 | 31061 | 56833 |
+------+---------+-----------+
10 rows in set (0.00 sec)
順序が正しいのに、異なる結果がランク付けされる理由を誰かに説明できますか?