7

我正在为我的 CMS 使用嵌套集,但从 MySQL 5.5 开始,我无法移动节点。
抛出以下错误:

重新排序文档时出错:MySQL-DB 中的错误:无效的 SQL:

 SELECT baum2.id AS id,
 COUNT(*) AS level
 FROM elisabeth_tree AS baum1,
 elisabeth_tree AS baum2
 WHERE baum2.lft BETWEEN baum1.lft AND baum1.rgt
 GROUP BY baum2.lft
 ORDER BY ABS(baum2.id - 6);

错误:BIGINT UNSIGNED 值超出 '( lektoren. baum2. id- 6)'的范围
错误号:1690

有没有人解决这个问题?我已经尝试过铸造一些零件,但没有成功。

4

3 回答 3

10

BIGINT UNSIGNED 是无符号的,不能为负数。

ABS(lektoren.baum2.id - 6)如果 id 小于 6,您的表达式将使用负中间值。

据推测,早期版本隐式转换为 SIGNED。你需要做一个演员表。

尝试

ORDER BY ABS(CAST(lectoren.baum2.id AS SIGNED) - 6)
于 2011-04-21T11:08:36.137 回答
5
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

在执行查询之前调用它。

于 2014-01-14T11:22:35.147 回答
1

ORDER BY ABS(CAST(lectoren.baum2.id AS BIGINT SIGNED) - 6)

该更改仅是mysql。

相反,做

ORDER BY ABS(- 6 + baum2.id);
于 2012-08-12T16:24:24.820 回答