Поэтому я использую laravel 5.8 и у меня есть следующая таблица с именем tasks
id | name | rank
------------------
1 | task 1 | 4
------------------
2 | task 2 | 3
------------------
3 | task 3 | 2
------------------
4 | task 4 | 1
И когда я хочу отобразить эти задачи, я сортирую их столбец ordredBy rank
(который unique
столбец), и если я хочу изменить ранг для одной задачи, мне нужно обновить ранг всех задач
Я хотел бы использовать этот запрос:
UPDATE tasks
JOIN (SELECT t.id,
@curRank := @curRank + 1 AS rank
FROM tasks t
JOIN (SELECT @curRank := 0) r
ORDER BY t.rank DESC
) ranks ON (ranks.id = tasks.id)
SET taks.rank = ranks.rank;
, поэтому я сделал выделенную часть из запроса:
DB::table('tasks ta')
->select(DB::raw('ta.id, @curRank := @curRank + 1 as rank'))
->crossJoin(DB::raw('select @curRank : 0 as r'))
->orderBy('ta.rank', 'desc');
, но я не понял, как объединить обновление с оператором select в laravel построителе запросов .