首页 > 解决方案 > MariaDB/MySQL 使用更新内部加入 MariaDB 是错误的顺序,但在 MySQL 中是正确的

问题描述

想在下面寻求您的帮助:

我想更新lessonnumberTablelessons中的,逻辑是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 是错误顺序

任何人都可以帮助解决我的问题吗?预先感谢您的帮助

标签: mysqllaravelmariadb

解决方案


您在 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;

推荐阅读