Article View: es.comp.lenguajes.php
Article #81Re: Ordenar registros según campo 'orden'
From: Javi
Date: Wed, 25 Feb 2009 16:45
Date: Wed, 25 Feb 2009 16:45
118 lines
6057 bytes
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-mailReferences:
<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)