7

CMSのネストされたセットを使用していますが、MySQL5.5以降はノードを移動できません。
次のエラーがスローされます。

docsの並べ替え中にエラーが発生しました: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値が'(。。- 6)'の範囲外lektorenです エラー番号:1690baum2id

誰かがこの問題を解決しましたか?私はすでにいくつかのパーツをキャストしようとしましたが、成功しませんでした。

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 に答える