次の表があります。
+----+----------+----------+
| id | trail_id | position |
+----+----------+----------+
| 11 | 16       | NULL     |
| 12 | 121      | NULL     |
| 15 | 121      | NULL     |
| 19 | 42       | NULL     |
| 20 | 42       | NULL     |
| 21 | 42       | NULL     |
+----+----------+----------+
positionそして、整数をインクリメントして(親ごとに)更新する簡単な方法を探しています。完了すると、テーブルは次のようになります。
+----+-----------+----------+
| id | trail_id  | position |
+----+-----------+----------+
| 11 | 16        | 1        |
| 12 | 121       | 1        |
| 15 | 121       | 2        |
| 19 | 42        | 1        |
| 20 | 42        | 2        |
| 21 | 42        | 3        |
+----+-----------+----------+
私が必要だと思うのは、特定の のすべての行をループしtrail、単純な増分インデックスを持ち、position列を更新する関数です。ただし、私はpgSQLの初心者なので、これを行う簡単な方法があると聞いてうれしいです.
私が今試している解決策は次のようになります
CREATE FUNCTION fill_positions(tid integer) RETURNS integer AS $$
DECLARE
    pht RECORD;
    i INTEGER := 0;
BEGIN
    FOR pht IN SELECT * FROM photos WHERE photos.trail_id = tid LOOP
        i := i + 1;
        UPDATE photos SET position = i WHERE id = pht.id;
    END LOOP;
    RETURN i;
END;
$$ LANGUAGE plpgsql;
私はそれがよりきれいになると確信しており、関数を使用する必要はありません。