mysql rownum

問題の声明



データベースには、 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;










オリジナル



All Articles