Bryan Wilkerson wrote:

My first question concerns self ordering lists.  Basically, a numeric
column that automatically maintains an order but allows arbitrary
reordering by the user.  For example, a media playlist or the
priority of workitems within a parent container ;)     This seems
like a common pattern.

priority |  workitem
---------+-----------
1        | task 1
2        | task 2
3        | task 3
4        | task 4
5        | task 5

Insert a new task with priority==2 and...

 update tablename set priority=priority+1 where priority >= 2

delete task with priority==2 and...

 update tablename set priority=priority-1 where priority > 2

reorder task with priority==2, set its priority=4

 update tablename set priority=priority+1 where priority >= 4
>  update tablename set priority=priority-1 where priority > 2
>   and priority < 4

etc....

I've implemented in my model code but it has some deadlock issues and
I really strongly have believed all along that this belongs in the db
anyway.  Implementing the above with triggers is a tricky problem
because the trigger would key off the priority change and the
successive updates would recusively trigger.


Why not update everything into a temp table first, then update the original with the new values from that? Or maybe a view is better suited to this.

brian

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

              http://www.postgresql.org/docs/faq

Reply via email to