Comments 4
mysql> describe rt;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| rating | int(11) | YES | | NULL | |
| place | int(11) | YES | | NULL | |
+--------+---------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> select * from rt;
+------+--------+-------+
| id | rating | place |
+------+--------+-------+
| 1 | 86 | NULL |
| 2 | 5 | NULL |
| 3 | 5 | NULL |
+------+--------+-------+
3 rows in set (0.00 sec)
mysql> update rt set place = (select @rownum:=@rownum+1 from (select @rownum:=0)
t) order by rating, id;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from rt;
+------+--------+-------+
| id | rating | place |
+------+--------+-------+
| 1 | 86 | 3 |
| 2 | 5 | 1 |
| 3 | 5 | 2 |
+------+--------+-------+
3 rows in set (0.00 sec)
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| rating | int(11) | YES | | NULL | |
| place | int(11) | YES | | NULL | |
+--------+---------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> select * from rt;
+------+--------+-------+
| id | rating | place |
+------+--------+-------+
| 1 | 86 | NULL |
| 2 | 5 | NULL |
| 3 | 5 | NULL |
+------+--------+-------+
3 rows in set (0.00 sec)
mysql> update rt set place = (select @rownum:=@rownum+1 from (select @rownum:=0)
t) order by rating, id;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from rt;
+------+--------+-------+
| id | rating | place |
+------+--------+-------+
| 1 | 86 | 3 |
| 2 | 5 | 1 |
| 3 | 5 | 2 |
+------+--------+-------+
3 rows in set (0.00 sec)
Упц. Не знал про возможность использования :=
Сам сделал через update...select
Сам сделал через update...select
то есть update на т.н. inline view?
на мой вариант ушло 5 минут, первый поиск по запросу «mysql rownum» вернул конструкцию как я привел.
для меня было откровением update… order by rating, id :) это необычно.
на мой вариант ушло 5 минут, первый поиск по запросу «mysql rownum» вернул конструкцию как я привел.
для меня было откровением update… order by rating, id :) это необычно.
Sign up to leave a comment.
Задачка для знатоков MySQL