si tratta di un argomento un pò complesso ma mi è capitato già di sbatterci la testa.
Ti dò i consigli secondo l'opinione che ho maturato:
il campo position deve essere UNIQUE (così eviti due record con la stessa posizione) e senza "buchi".
Essendo un campo di tipo unique le query DELETE e UPDATE che tradizionalmente faccio con la condizione riferita ad un campo id auto_increment le posso condizionare direttamente sul campo 'position'
Questa cosa che può sembrare una scemenza in realtà mi ha consentito di agevolarmi molto il compito di gestione di tale genere di campo: ti faccio un esempio.
Abbiamo una tabella con 10 record quindi il campo posizion (unique e senza buchi) avrà valori che vanno da 1 a 10.
Voglio eliminare il campo con position=5 tramite un link get
Eseguirò due query:
codice:
DELETE tabella WHERE position=$_GET['position']
UPDATE tabella SET position=position-1 WHERE position>$_GET['position']
Per le insert invece devi crearti una funzione tipo get_maxPosition
Codice PHP:
function get_maxPosition($table, $fieldPosition){
$query = "SELECT MAX($fieldPosition) AS maxPosition FROM $table";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
return $row[0];
}
questa generica funzione ti permetterà di ottenere il valore massimo di un campo di una tabella... ergo al momento della insert il valore di position sarà quello che ottieni da questa funzione incrementato di 1.
Per UP e DOWN lì son c**zi... !!!