ciao
per divertimento ho provato, considerando di avere una tabella del tipo:
Codice:
id int(6) autoincrement primarykey
nome varchar (50)
posizione int(6) default 0
]al primo inserimento di un utente
PHP:
//connessione
$nome=$_POST['nome'];
$query=mysqli_query($conn,"SELECT max(posizione) as ultimo FROM tabella");//leggo la posizione massima registrata
$r=mysqli_fetch_assoc($query);
$pos=(int)($r['ultimo']+1);
$query=mysqli_query($conn,"INSERT tabella(nome,posizione) VALUES('$nome',$pos)");
//l'ultimo utente inserito viene inserito come ultima posizione
poi per cambiare posizione ad un utente
form per cambio:
PHP:
//connessione
$query=mysqli_query($conn,"SELECT max(posizione) as ultimo FROM tabella");//oppure da precedente
$r=mysqli_fetch_assoc($query);
$pos=(int)($r['ultimo']);
$query=mysqli_query($conn,"SELECT * FROM tabella ORDER BY nome");// o order by posizione, nome
echo "<form....>";
while($riga=mysqli_fetch_assoc($query)){
$id=$riga['id'];
$nome=$riga['nome'];
$posto=$riga['posizione'];
//un po di js per inviare al insert della nuova posizione
//in modo da esegure un cambio alla volta (secondo me si evitano errori)
echo "<input name=\"id\" type=\"hidden\" value=\"$id\">";
echo "spostare $nome da $posto a: <input type=\"number\" name=\"pos\" min=\"1\" max=\"$pos\">";
}
echo "</form>";
script per cambio posizione
PHP:
//connessione
$id=$_POST['id'];
$nuova_pos=$_POST['pos'];
//uppo la nuova posizione per l'utente
$query=mysqli_query($conn,"UPDATE tabella SET posizione=$nuova_pos WHERE id=$id");
//riaggiusto le varie posizioni scalando gli utenti con posizione maggiore dell'inputata
$query=mysqli_query($conn,"UPDATE tabella SET posizione=posizione+1 WHERE posizione>=$nuova_pos AND id !=$id");
dato la possibilità di eliminare un utente potrebbe succedere che si formi un buco tra una posizione e la successiva, quindi riordino ogni tanto o quando elimino l'utente, la tabella
PHP:
//connessione
//ho eliminato un utente e quindi riordino
$query=mysqli_query($conn,"SELECT id FROM tabella ORDER BY posizione ASC");
$p=1;
while($riga=mysqli_fetch_assoc($query)){
$id=$riga['id'];
$riordina=$qu($conn,"UPDATE tabella SET posizione=$p WHERE id=$id");
$p++;
}
potrebbe andare per ordinamento arbitrario e soggettivo?