問題の声明
データベースには、 order_id順序フィールドを持つメニューテーブルがありますが、順序は正しくないため、別のタイトルフィールドの順序をアルファベット順に更新する必要があります。 テーブルは階層メニューであり、ユーザーはorder_idを設定して順序を変更できるため、タイトルフィールドによる並べ替えは除外されます。 サーバー処理(php)を個別に使用することも不利です-データベースでビジネスロジックを不必要に分離でき、大量のデータの場合、より多くのリソースが必要になります。
解決策
MySQLでは、残念ながらそのような可能性はありませんROWNUM、RANK()、
ORACLEまたはMSSQLのようにROW_NUMBER()。 _rowidの存在は効果がありません
状況に。 この場合、5番目のバージョン(またはそれ以前)から入力した変数を使用できます。
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, id FROM menu;
自分でそのようなテーブルを更新するために、私は成功しなかったので、別の名前でテーブルをコピーし、次のクエリを実行しました。
SET @rank=0;
UPDATE `menu` SET order_id=(
SELECT @rank:=@rank+1 FROM `menu2` WHERE `menu`.id=`menu2`.id LIMIT 1
) WHERE parentID=0 ORDER BY `title` ASC;
オリジナル