My initial thought would be just keeping a score field in your database and doing an order by. Like
MrNick said this would work well for reasonably sized data sets. The part that gets tricky is when a higher rung moves down x% of the total rungs. This would involve changing the score to a number between the scores of the correct rungs.
Important details I would like to have:
Number of players
How a player beats another player
What information you're keeping track of in terms of rating and score
An array might be a good way of holding your items. If you tied the array to keep it flushed to disk that might another way of handling it.