Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I have a list of Students that I should display to user on a web page in tabular format.
The items are stored in DB along with SortOrder information.

On the web page, user can rearrange the list order by dragging and dropping the items to their desired sort order, similar to this post.

Below is a screenshot of my test page.
enter image description here

In the above example, each row has sort order info attached to it. When I drop John Doe (Student Id 10) above the Student Id 1 row, the list order should now be: 2, 10, 1, 8, 11.

What's the optimistic (less resource hungry) way to store and update Sort Order information?

My only idea for now is, for every change in the list's sort order, every object's SortOrder value should be updated, which in my opinion is very resource hungry.

Just FYI: I might have at most 25 rows in my table.

share|improve this question
    
Do you need to have this sort order persisted on the server side, or is having it just on the client side sufficient? –  deterb Jun 23 '12 at 2:22
    
I should store the order on server-side. It doesnt matter if the order is stored on every drag-drop or by clicking a button once and for all. –  Alexander Jun 24 '12 at 21:32

2 Answers 2

I have think of something, which can reduce your queries. Here in my example, I have added a new column for sorting named pos. So, initially without any dragging your table will be like -

Initial State

Now, Lets consider that you dragged the Item 4 between Item 1 & Item 2. Now, new pos value for Item 4 will be (20 + 10) / 2, which is 15. So, You will only need to update a single row in database. And, you will get -

After Drag

Here is a flowchart with the edge cases. i is the new array index of your row after dragged -

Flow Chart

This flowchart doesn't handle ArrayOutOfBound checks. And, for edge cases you will need more than one query.

Since you have only 25 rows, you can take a very big value (e.g. 10,000) for the pos difference (I took 10 for this example). The bigger the value is, the less it will collide.

share|improve this answer

Personally I would return a JSON array for the data from the back end. Then I would use JavaScript (JQuery or knockout) to display and sort and re-sort the data. That way the sorting has zero load on the server.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.