обновить столбцы в абсолютном числовом порядке - PullRequest
0 голосов
/ 28 января 2019

Что у меня есть:

subject_id       courseid     position
----------- ---------- --------------------
1                    1           0
2                    1           1
3                    1          50
4                    2          55
5                    1          56
6                    2          58

в столбце position есть относительный порядок, и я хочу сделать его в абсолютном порядке, например:

Что я хочу:

subject_id          courseid       position
----------- ---------- --------------------
1                     1              0
2                     1              1
3                     1              2
4                     2              0
5                     1              3
6                     2              1

В принципе, я хочу, чтобы в каждом курсе позиции предметов начинались с нуля и т. Д.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

В MySQL вы можете сделать это с переменными:

set @rn := -1;
set @c := -1;

update t
    set position = (@rn := if(@c = courseid, @rn + 1,
                              if(@c := courseid, 0, 0)
                             )
                   ) 
    order by courseid, id;
0 голосов
/ 28 января 2019

Вы можете использовать коррелированный подзапрос:

update t
     set t.position = (select count(t1.courseid) 
                       from t t1 
                       where t1.courseid = t.courseid and t1.subject_id < t.subject_id
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...