A ver...lo tengo todo adaptado en cosas que no se sacan en un paso, pero tratare de explicarlo...
Tenemos dos partes, una es el listado, el cual se ordena siempre por el campo orden y el cuál tendrá en html esta columna para ordenar los registros.
Entonces, en el listado tendríamos algo como:
Código PHP:
<?php
#El query que levantara todo de la tabla, supongamos, noticias
$sql "Select * from noticias order by orden";
$PAGINADO = 10;
$pagina = $_GET["pagina"];
$offset = ( $pagina * $PAGINADO ) - $PAGINADO;
$total = mysql_num_rows( mysql_query( $sql ) ) ;
#Levantar paginado
$sql .= ' LIMIT '.$offset.','.$PAGINADO ;
$r = mysql_query( $sql );
?>
<table width="500">
<tr>
<td>Título</td>
<td>Orden</td>
</tr>
<?php
$codigo_ant = 0 ;
$orden_ant = 0 ;
$cont = 0 ;
while( $rs = mysql_fetch_array( $r, MYSQL_ASSOC ) ){
$cont+=1;
?>
<tr>
<td><?php echo $rs["titulo"];?></td>
<td><?php if ($cont > 1 || $pagina >1 ){?><a href="ordenar.php?orden=<?php echo $orden_ant ?>&codigo=<?php echo $codigo_ant ?>"><img src="images/flechaup_azul.gif"></a> <?php } if ($PAGINADO*($pagina-1)+$cont < $total ){?> <a href="ordenar.php?codigo=<?php echo $rs["codigo"] ?>&orden=<?php echo $rs["orden"] ?>"><img src="images/flechadwn_azul.gif"></a><?php } ?></td>
</tr>
<?php
$codigo_ant=$rs["codigo"];
$orden_ant=$rs["orden"];
}
mysql_free_result( $r );
#Acá pondrían el paginado.
?>
Bien, acá tendríamos un listado con dos columnas, titulo o orden.
Nos restaría únicamente el file ordenar.php que ordenaría estos registros:
Código PHP:
<?php
$codigo = $_GET['codigo'];
$orden = $_GET['orden'];
define( "TABLA", "noticias", 1);
$rs = mysql_query( "select codigo, orden from ". TABLA ." where orden > ". $orden ." order by orden LIMIT 1" );
if ( $r = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){
$codigoArriba = $r["codigo"];
$ordenArriba = $r["orden"];
mysql_query( "update ".TABLA." set orden=". $ordenArriba ." where codigo=". $codigo );
mysql_query( "update ".TABLA." set orden=". $orden ." where codigo=". $codigoArriba );
}
mysql_free_result( $rs );
header("Location: listado.php");
?>
Eso sería todo, si hay algo que no les funcione diganlo.
PD: Esto no tiene ninguna validacion siquiera de los tipos de datos, pueden agregarlo a gusto y necesidad. Espero que sea de utilidad.