【发布时间】:2020-08-13 01:17:57
【问题描述】:
所以我使用的是 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 = rank.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');
但我不知道如何在 laravel 查询生成器中使用 select 语句加入更新。
【问题讨论】:
-
我在这里看不到任何@variables 的需要/目的。