【发布时间】:2021-10-01 03:16:36
【问题描述】:
我安装了新版本的 MariaDB,但在排序 php-script 时遇到了问题:
$this->db->query("
SET @v:=0;
UPDATE `users` AS `c1`
LEFT JOIN (SELECT `id`, (@v:=@v+2) AS `ord2`, `name`, `parent`
FROM `users`
WHERE `parent`='0' ORDER BY `ord` ASC) AS `c2`
ON `c1`.`id` = `c2`.`id`
SET `c1`.`ord` = `c2`.`ord2`
WHERE `c1`.`parent` = '0'
");
特别是脚本设置users 表中的条目顺序,按ord 对它们进行排序:
+----+-----+--------------------+--------+
| id | ord | name | parent |
+----+-----+--------------------+--------+
| 2 | 2 | admin | 0 |
| 10 | 5 | manager | 0 |
| 12 | 7 | user | 0 |
| 11 | 9 | dev | 0 |
+----+-----+--------------------+--------+
我不熟悉 SQL,经过长时间的搜索和测试,我发现 SQL 查询无法正常工作:
SELECT `id`, (@v:=@v+2) AS `ord2`, `name`, `parent`
FROM `users`
WHERE `parent`='0' ORDER BY `ord` ASC;
在以前版本的 MariaDB (5.5.5-10.1.25) 中,查询给出按初始顺序排序的条目 (ord):
+----+-----+--------------------+--------+
| id | ord2| name | parent |
+----+-----+--------------------+--------+
| 2 | 2 | admin | 0 |
| 10 | 4 | manager | 0 |
| 12 | 6 | user | 0 |
| 11 | 8 | dev | 0 |
+----+-----+--------------------+--------+
在新版本(10.6.3)中结果是:
+----+-----+--------------------+--------+
| id | ord2| name | parent |
+----+-----+--------------------+--------+
| 2 | 2 | admin | 0 |
| 10 | 4 | manager | 0 |
| 12 | 8 | user | 0 |
| 11 | 6 | dev | 0 |
+----+-----+--------------------+--------+
我尝试将 ORDER BY param ord 设置为 name 和 id,但结果相同。看起来像 col ord2 填充偶数总是按 id 升序排序。
我应该如何重写查询或脚本来解决问题?
【问题讨论】: