mysql - MariaDB/MySQL 使用更新内部加入 MariaDB 是错误的顺序,但在 MySQL 中是正确的
问题描述
想在下面寻求您的帮助:
我想更新lessonnumber
Tablelessons
中的,逻辑是lessonnumber
会根据starttime
. 我下面的 laravel 代码在 MySQL 中工作,但在 MariaDB 中出现错误顺序。
php
DB::statement('set @i=0;');
$type_id = 2; //lessons type
DB::update("
UPDATE lessons A
INNER JOIN (SELECT * FROM lessons WHERE lessons.type_id = $type_id ORDER BY lessons.starttime ASC LIMIT 30) B
ON B.id = A.id
SET A.lessonnumber = (select @i:=@i+1)
");
ID | 课号 | 开始时间 |
---|---|---|
1 | 1 | 11 |
2 | 3 | 33 |
3 | 2 | 22 |
4 | 4 | 44 |
5 | 5 | 55 |
Mysql:第1 3 2 4 5课是正确的顺序
ID | 课号 | 开始时间 |
---|---|---|
1 | 1 | 11 |
2 | 2 | 33 |
3 | 3 | 22 |
4 | 4 | 44 |
5 | 5 | 55 |
MariaDB:课程编号 1 2 3 4 5 是错误顺序
任何人都可以帮助解决我的问题吗?预先感谢您的帮助
解决方案
您在 id 上加入,因此连接查询中的排序被忽略。按顺序更新的正确形式是https://dev.mysql.com/doc/refman/8.0/en/update.html
SET @I = 0;
UPDATE LESSONS A
SET A.lessonnumber = (select @i:=@i+1)
WHERE TYPE_ID = 2
ORDER BY STARTTIME;
推荐阅读
- google-app-engine - 应用引擎服务器不再设置内容编码标头
- flask - py2app如何添加自定义模块
- django - Django:将 Func 用于未嵌套的字典数组并应用过滤器
- angular - CKEDITOR:如何使用 CKEDITOR4 在 typescript 中获取编辑器的实例
- pandas - 来自 DataFrame 索引的 csv 中的列没有标题名称
- json - 带有 JSON 数据的 Vue.js 动态 OctoberCMS 菜单?
- random - 八度:在表格内的随机单元格中填充特定值
- android - 单击 ImageView 时如何在新 Activity 上打开“ExpandableListView”
- javascript - 没有多个用户的 REST API 网络安全
- javascript - 修复未定义,客户端和服务器端