L'ho fatta un po di tempo fa per l'ordinamento di categorie di prodotti:
Codice PHP:
//spostare in alto
if($_GET['action'] == "up")
{
$j = $_GET['j'];
$id_low = $j+1;
$id_high = $id_low-1;
$result = mysql_query("SELECT * FROM ".$tbl_prodotti." WHERE id = ".$id_high);
$i=0;
while($row[$i] = mysql_fetch_array($result)) { $i++; }
$index_low = $_POST['index'.$j];
$index_high = $row[0]['index'];
mysql_query("UPDATE `".$tbl_prodotti."` SET `ordine` = '".$id_high."' WHERE `index` =".$index_low." LIMIT 1");
mysql_query("UPDATE `".$tbl_prodotti."` SET `ordine` = '".$id_low."' WHERE `index` =".$index_high." LIMIT 1");
//ritorna al pannello
}
//spostare in basso
if($_GET['action'] == "down")
{
$j = $_GET['j'];
$id_high = $j+1;
$id_low = $id_high+1;
$result = mysql_query("SELECT * FROM ".$tbl_prodotti." WHERE id = ".$id_low);
$i=0;
while($row[$i] = mysql_fetch_array($result)) { $i++; }
$index_high = $_POST['index'.$j];
$index_low = $row[0]['index'];
mysql_query("UPDATE `".$tbl_prodotti."` SET `ordine` = '".$id_high."' WHERE `index` =".$index_low." LIMIT 1");
mysql_query("UPDATE `".$tbl_prodotti."` SET `ordine` = '".$id_low."' WHERE `index` =".$index_high." LIMIT 1");
//ritorna al pannello
}
//aggiungere
if($_GET['action'] == "ins")
{
$n = $_GET['n'] + 1;
mysql_query("INSERT INTO `".$tbl_prodotti."` ( `index` , `ordine` , `nome` , `descrizione` ) VALUES ('', '".$n."', '".$_POST['nome']."', '".$_POST['descrizione']."')");
//ritorna al pannello
}
//cancellare
if($_GET['action'] == "canc")
{
$j = $_GET['j'];
$n = $_GET['n'];
$id = $j+1;
mysql_query("DELETE FROM ".$tbl_prodotti." WHERE id = ".$id);
if($j<$n-1)
{
for($i=$j+1;$i<$n;$i++)
{
$r = $i+1;
mysql_query("UPDATE `".$tbl_prodotti."` SET `ordine` = '".$i."' WHERE `ordine` =".$r." LIMIT 1");
}
}
//ritorna al pannello
}
L'unica cosa da notare è che (oltre al fatto che non è ottimizzato :P) io avevo nella tabella 2 ID di riconoscimento per il prodotto:
- index
- ordine
l'Index è una key auto_increment, quindi UNIVOCA, mentre 'ordine' mi serviva per manipolarne l'ordinamento senza incorrere in conflitti di doppioni durante l'esecuzione degli script.
Io passavo a questo script il valore dell'index tramite POST, ma puoi farlo tranquillamente in GET evitando di usare dei submit di un form.
Spero ti torni utile^^