🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.php
Article #81

Re: Ordenar registros según campo 'orden'

#81
From: Javi
Date: Wed, 25 Feb 2009 16:45
118 lines
6057 bytes
Gracias a todos por vuestras respuestas. No sé si no me he expresado
bien o -lo más probable- es que me estoy complicando la cabeza yo
solo. Al final, me ha salido lo que quería. Tengo esta tabla (se llama
'ordenar'):

ordenar_id 	ordenar_nombre 	ordenar_orden
1 	                Javi 	                        1
2 	                Pepe 	                2
3 	                Juan                         3
4 	                Luis 	                        4
5 	                Antonio 	                5
6 	                Dani                  	6

La idea es que el usuario pueda decidir el orden en el que aparecen
los elementos, más allá de ORDER BY ordenar_id ASC, etc. Es decir: la
consulta de salida se realiza siempre con ORDER BY ordenar_orden ASC.
He creado el archivo ordenar.php que lo hace; si lo ejecutáis, veréis
lo que quiero hacer, ya funciona; ahora es cuestión de ver si hay
alguna forma de simplificar el código:

<?php

require_once('php/datos_conexion.php');

// ESTA PARTE DE CÓDIGO SE EJECUTA SÓLO CUANDO SE HA EJECUTADO EL
FORMULARIO

if ((isset($_POST["editar"])) && ($_POST["editar"] == "ordenar")) {
	mysql_select_db($database_desarrollo, $desarrollo);
	if($_POST['ordenar_orden'] < $_POST['orden_original']){
		$query_consulta1 = "SELECT * FROM ordenar WHERE ordenar_orden >= ".
$_POST['ordenar_orden']." AND ordenar_orden <= ".$_POST
['orden_original'];
		$tipo = 'ascendente';
	}else{
		$query_consulta1 = "SELECT * FROM ordenar WHERE ordenar_orden <= ".
$_POST['ordenar_orden']." AND ordenar_orden >= ".$_POST
['orden_original'];
		$tipo = 'descendente';
	}
	$consulta1 = mysql_query($query_consulta1, $desarrollo) or die
(mysql_error());
	$row_consulta1 = mysql_fetch_assoc($consulta1);
	do{
		if($row_consulta1['ordenar_id']!=$_POST['ordenar_id']){
			if($tipo=='ascendente'){
				$ejecutaSQL = 'UPDATE ordenar SET ordenar_orden='.($row_consulta1
['ordenar_orden'] + 1).' WHERE ordenar_id='.$row_consulta1
['ordenar_id'];
			}elseif($tipo=='descendente'){
				$ejecutaSQL = 'UPDATE ordenar SET ordenar_orden='.($row_consulta1
['ordenar_orden'] - 1).' WHERE ordenar_id='.$row_consulta1
['ordenar_id'];
			}
		}else{
			$ejecutaSQL = 'UPDATE ordenar SET ordenar_orden='.$_POST
['ordenar_orden'].' WHERE ordenar_id='.$row_consulta1['ordenar_id'];
		}
		mysql_select_db($database_desarrollo, $desarrollo);
		$Result1 = mysql_query($ejecutaSQL, $desarrollo) or die(mysql_error
());
	}while($row_consulta1 = mysql_fetch_assoc($consulta1));
}

// FIN DE LA PARTE QUE CAMBIA EL ORDEN

mysql_select_db($database_desarrollo, $desarrollo);
$query_nombres = "SELECT * FROM ordenar ORDER BY ordenar_orden ASC";
$nombres = mysql_query($query_nombres, $desarrollo) or die(mysql_error
());
$row_nombres = mysql_fetch_assoc($nombres);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<table width="500" border="0" align="center" cellpadding="0"
cellspacing="0">
  <?php do { ?>
    <tr>
      <td height="45"><form id="ordenar" name="ordenar" method="POST"
action="ordenar.php">
        <table width="500" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="60" height="25"><?php echo $row_nombres
['ordenar_id']; ?></td>
            <td width="190" height="25"><?php echo $row_nombres
['ordenar_nombre']; ?></td>
            <td width="150" height="25"><input name="ordenar_orden"
type="text" id="ordenar_orden" value="<?php echo $row_nombres
['ordenar_orden']; ?>" size="3" maxlength="2" />
              <input name="orden_original" type="hidden"
id="orden_original" value="<?php echo $row_nombres['ordenar_orden']; ?
>" />
              <input name="ordenar_id" type="hidden" id="ordenar_id"
value="<?php echo $row_nombres['ordenar_id']; ?>" />
              <input name="editar" type="hidden" id="editar"
value="ordenar" /></td>
            <td width="100" height="25"><input type="submit"
name="button" id="button" value="Enviar" /></td>
          </tr>
        </table>
      </form></td>
    </tr>
    <?php } while ($row_nombres = mysql_fetch_assoc($nombres)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($nombres);
?>
Technical Details
Message-ID: <909555d4-04fb-4712-a3b5-aa80b5c9041d@n30g2000vba.googlegroups.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!postnews.google.com!n30g2000vba.googlegroups.com!not-for-mail
References: <7eded1a0-77c1-4564-91d9-744c32443a92@b16g2000yqb.googlegroups.com> <gngvi4$inr$1@news.motzarella.org> <fa5a9a42-1749-47cb-9792-ba2ab31ab81c@m42g2000yqb.googlegroups.com> <i6fop4ldebrpm17oh329pa6nppr5tdol9d@4ax.com>

Show Full Headers
Complete Article Headers
X-Google-Thread: 107579,9a02d81a5464e2d6
X-Google-Attributes: gid107579,domainid0,public,usenet
X-Google-Language: SPANISH,UTF8
Path: arc1-ca.pugleaf.net!g2news1.google.com!postnews.google.com!n30g2000vba.googlegroups.com!not-for-mail
From: Javi <falces@gmail.com>
Newsgroups: es.comp.lenguajes.php
Subject: Re: Ordenar registros según campo 'orden'
Date: Wed, 25 Feb 2009 08:45:31 -0800 (PST)
Organization: http://groups.google.com
Lines: 118
Message-ID: <909555d4-04fb-4712-a3b5-aa80b5c9041d@n30g2000vba.googlegroups.com>
References: <7eded1a0-77c1-4564-91d9-744c32443a92@b16g2000yqb.googlegroups.com> 
 <gngvi4$inr$1@news.motzarella.org> <fa5a9a42-1749-47cb-9792-ba2ab31ab81c@m42g2000yqb.googlegroups.com>
 <i6fop4ldebrpm17oh329pa6nppr5tdol9d@4ax.com>
NNTP-Posting-Host: 81.43.112.26
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
X-Trace: posting.google.com 1235580331 13113 127.0.0.1 (25 Feb 2009 16:45:31 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Wed, 25 Feb 2009 16:45:31 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: n30g2000vba.googlegroups.com; posting-host=81.43.112.26; 
 posting-account=aj2zSwoAAAAS7h9BSJ5cCb1GHRxFf3dc
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.6) 
 Gecko/2009011913 Firefox/3.0.6,gzip(gfe),gzip(gfe)