Io penso che un buon database come MySql (che dovrò decidermi ad imparare a usare) possa avere una funzione nativa per aggiornare le posizioni dei record in un caso come il tuo, peraltro interessante.
Penso anche che se inserissi i (in fondo solo dieci) records in un array ne potresti gestire le posizioni più comodamente.
Lavorando con Access, farei
codice:
titolo = request.form("titolo")
nuova = request.form("posizione")
sql1 = "select posizione from [Hit parade] where titolo = '"&titolo&"'"
set rs1 = server.createobject("ADODB.recordset")
rs1.open sql1, conn, 3, 3
vecchia = rs1("posizione")
rs1.close
set rs1 = nothing
sql2 = "select * from [Hit parade] where posizione between "&nuova&" and ("&vecchia&"+1)"
set rs2 = server.createobject("ADODB.recordset")
rs2.open sql2, conn, 3, 3
do until rs2.eof
sql3 = "update [Hit parade] set posizione = "&rs2("posizione")&"+1 where titolo = '"&rs2("titolo")&"'"
conn.execute(sql3)
rs2.movenext
loop
rs2.close
set rs2 = nothing
sql4 = "update [Hit parade] set posizione = "&nuova&" where titolo = '"&titolo&"'"
conn.execute(sql4)
A parte i 50 errori che ci saranno, il concetto é:
- recuperare dal form il titolo e la sua nuova posizione
- recuperare dal database i titoli la cui posizione è compresa tra la vecchia (esclusa) e la nuova (compresa) del titolo in questione
- aggiornarli tutti aumentando di 1 il valore del loro campo posizione
- infine aggiornare il titolo recuperato, cambiando la sua posizione nel nuovo valore.
Il campo posizione nell'esempio è numerico, titolo è testo.
Bisogna gestire il caso in cui la nuova posizione sia più bassa della vecchia ( nell'esempio la nuova è più alta della vecchia) ma è questione di un if, e inoltre bisogna gestire il caso in cui il titolo sia una new entry, nel qual caso il titolo al numero 10 uscirebbe di classifica.