最近、いくつかの休止状態にマップされたクラスのセマンティクスをリストに変更しました。リストのインデックス列を追加すること自体は簡単ですが、適切な方法でデータを設定することはそれほど簡単ではないように思えました。私は次のストアド プロシージャ (PL/pgsql) を作成しました。これは、参照列で並べ替えられたテーブルのすべての行をループし、新しい参照番号が見つかるまでインデックスを 0、1、2、3 などに設定することによって機能します。 . 問題は解決しましたが、同じ結果を達成するためのより簡単な方法があるのではないかと思います。
CREATE OR REPLACE FUNCTION setlistorderfunc(VARCHAR, VARCHAR) RETURNS VOID AS $$
DECLARE
currIndex INTEGER := 0;
currResource INTEGER := 0;
r RECORD;
BEGIN
FOR r IN execute 'SELECT id id, '|| $2 || ' res, resource_list_order rlo FROM ' || $1 || ' ORDER BY res ASC, rlo ASC' LOOP
IF currResource != r.res THEN
currResource := r.res;
currIndex := 0;
ELSE
currIndex := currIndex + 1;
END IF;
EXECUTE 'UPDATE ' || $1 || ' set resource_list_order = ' || currIndex || 'WHERE id = ' || r.id;
END LOOP;
END;
$$ LANGUAGE plpgsql;
rating
リソース ( という名前の列でリンクされている) のバッグをアップグレードするには、次のabout_resource
ようにします。
SELECT setlistorderfunc('rating', 'about_resource');