Thread: Another question: Order of entries

Another question: Order of entries

From
Stephan Richter
Date:
Hello everyone,

I have unfortunately another question (just to show how little I know about
functions in PostGreSQL):

I have a table ClassProblem. The table contains a reference to the Problem
table and contains a 'location' attribute. The entries in ClassProblem have
to be returned from in ascending location order.

Let's say I have:

ProblemId       |     Location
  --------------------+------------------
         1            |          3
         2            |          1
         3            |          2

Now two issues:
------------------------

1. I want to add another entry and it should have location=4, but I do not
know that it will have this location till I look at the table. I cannot use
sequence, since I will have many of these 'sets' in this table (I
simplified the table for my question.) So a function should first check for
the largest current location and then add 1 to the result and use it to
create the new entry.

2. I want to change the order the of one problem; let's say problem 3 to
location 1; so I just want to send in my SQL:

UPDATE ClassProblem SET location=1 WHERE problemid=3;

but since location is unique, the other entries should be adjusted
respectively to give me the following:

ProblemId       |     Location
  --------------------+------------------
         1            |          3
         2            |          2
         3            |          1

Note: Problem 2 shifted down to location 2.

I know how to solve the issue using Python (the programming language I
use), but it would require N*log(N) update statements by average, which can
be very expensive, especially when many people run this code at the same time.

Thanks a lot for your help in advance!

Regards,
Stephan
--
Stephan Richter
CBU - Physics and Chemistry Student
Web2k - Web Design/Development & Technical Project Management