我需要使用Laravel重新排序一些数据,并且(可能)流畅。原始测试&工作SQL看起来像这样:
SET @ordering = 0;
UPDATE data
SET `order` = (SELECT @ordering := @ordering + 1)
WHERE category_id = 400
ORDER BY points;
当然,这不是开箱即用的工作,但我不知道如何让它发挥作用。我尝试过各种各样的技巧。对我来说最明显的就是(也尝试statement()
):
DB::UPDATE(
'SET @ordering = 0;
UPDATE data
SET `order` = (@ordering = @ordering + 1)
WHERE category_id = ?
ORDER BY points',
[400]
);
但是这给我一个错误:
Illuminate \ Database \ QueryException,带有消息' SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近' UPDATE数据的正确语法SET
order
=(@ordering = @ordering + 1)WHERE categ'在第1行(SQL:SET @ordering = 0; UPDATE数据SETorder
=(@ ordering = @ordering + 1)WHERE category_id = 400 ORDER BY points)'
我已经尝试过我能想到的每一个变化,但似乎没有任何看法。如何设置db变量并使用它来更新?