Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ordenar tabla con botones

Estas en el tema de Ordenar tabla con botones en el foro de Mysql en Foros del Web. Hola a tod@s. Voy a intentar esplicaros lo que quiero hacer, de antemano os dire que no tengo idea de como hacerlo, tengo una base ...
  #1 (permalink)  
Antiguo 02/05/2012, 13:31
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 meses
Puntos: 7
Ordenar tabla con botones

Hola a tod@s.

Voy a intentar esplicaros lo que quiero hacer, de antemano os dire que no tengo idea de como hacerlo, tengo una base de datos Mysql que me saca unos registros en una tabla, dicha base tiene varios campos, ("Precio"), ("Habitaciones"), ("Baños") etc.. Hasta ahora lo ordenaba por "Precio" con ORDER BY Precio ASC, hasta aqui todo bien pero ahora tengo que poner varios botones para que el visitante de la web pueda seleccionar por que campo quiere ordenar, he pensado en sustituir el campo "Precio del ORDER BY por una variable pero no se como generar el valor de esa variable con los botones y que al pulsar refresque la tabla y muestre el nuevo orden.

Me podeis ayudar, Gracias.
  #2 (permalink)  
Antiguo 02/05/2012, 13:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ordenar tabla con botones

Si en ese punto has recuperado ya toda la tabla de resultados, eso lo puedes hacer por programación, si la tabla sólo se lee parcialmente lo más sencillo es que uses los indices de las columnas seleccionadas.
Esto último se hace poniendo en lugar de los nombres de las columnas, números enteros representando su posición, comenzando por 1. Ahora bien, para poder hacer eso se debe conocer de antemano el nombre de todas las columnas devueltas por la consulta y su respectiva posición en la tabla resultado.

Para ejemplificarlo, estas dos consultas devuelven exactamente el mismo orden de datos:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, f, g h, i
  2. FROM tabla1
  3. ORDER BY a, c, g;
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, f, g h, i
  2. FROM tabla1
  3. ORDER BY 1, 3, 7;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/05/2012, 17:35
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 meses
Puntos: 7
Respuesta: Ordenar tabla con botones

Perdona gnzsoloyo pero no lo he entendido porque el problema es que mis conocimientos son algo escasos en esta parte de mi problema, así que perdona si pregunto de nuevo algo que a lo mejor es muy sencillo pero yo no lo se hacer. Veras esta es mi consulta:

Código PHP:
<table width="655" height="100" rules="groups" bordercolor="FF0000" cellspacing=5>
     
     <?php
$sql 
"SELECT SQL_CALC_FOUND_ROWS * FROM venta";        

$sql .=  ' ORDER BY Precio ASC ';
$sql .= 'LIMIT 5' ;

 
// Si la consulta no puede ser ejecutada
        
if (!($result = @mysql_query($sql))) {
 
// Parada de la ejecución y el mensaje de error de visualización
            
die(mysql_error());
}
 
// Recuperar el número total de registros en la tabla
        
$rows mysql_fetch_assoc(mysql_query('SELECT FOUND_ROWS() AS rows'));
 
$tabla mysql_query($sql);
while (
$registro mysql_fetch_array($tabla)) {
?>
   <tbody> 
       <tr>
         <td width="95" rowspan="3"><img border="0" src="<?php echo $registro['ImagenesViviendas']; ?>"></td>
         <td height="15" colspan="7" valign="baseline"  align="left" style="font-family:'Arial Black', Gadget, sans-serif; font-size:26px; color:#F00"><?php echo $registro['Zona']; ?></td>
         <td valign="baseline"  align="right" width="167" style="font-family:'Arial Black', Gadget, sans-serif; font-size:26px; color:#F00"><?php echo number_format($registro['Precio'],0,",",".");?></td>
         <td align="left" valign="baseline" width="19" style="font-family:'Arial Black', Gadget, sans-serif; font-size:18px; color:#F00">€</td>
         
       </tr>

       </tbody>

   
       <?php
}
mysql_free_result($tabla);
        
?>
       
     </table>
En el anterior codigo he reducido al maximo mi consulta y la cantidad de resultados (<td></td>) para no hacerlo tan largo y como no he entendido lo que me esplicabas por culpa de mi desconocimiento pongo el código a ver si sobre el mismo me puedes orientar el como hacerlo, te aclaro que cuando me refiero a usar botones para ordenar me refiero a los tipicos botones como los que hay en buscar o en enviar en cualquier formulario.
Espero que me haya esplicado bien, he buscado ejemplos en la red pero no he encontrado nada para verlo y poder analizarlo ya que de esa forma lo logro entender.
  #4 (permalink)  
Antiguo 02/05/2012, 18:11
Avatar de Vector_Latino  
Fecha de Ingreso: mayo-2012
Mensajes: 25
Antigüedad: 11 años, 11 meses
Puntos: 6
Respuesta: Ordenar tabla con botones

Hola soy nuevo en el foro, pero creo que depronto podría ayudar.

Si lo que buscas es ordenar una consulta en MySQL dependiendo un campo(el que elja el usuario), podrías hacer algo muy sencillo cuando realices la consulta.

podrías hacer algo así:

Código PHP:
Ver original
  1. $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM venta";        
  2. $sql .=  " ORDER BY ".$_GET['ordenar']." ASC ";
  3. $sql .= "LIMIT 5" ;

donde [URL="http://www.php.net/manual/es/reserved.variables.get.php"]$_GET[/URL] es un array asociativo de variables pasado al script actual vía parámetros URL.

sabiendo que $_GET es un arreglo solo colocamos el parámetro que deseamos usar para ordenar la consulta como una posición de este, en este caso use ordenar como parámetro para ordenar la consulta MySQL.

ejemplo:

si la pagina donde tienes el script PHP para generar la consulta fuera "mostrar.php", entonces lo que se hace es, por medio de un link o un boton mandarlo a mostrar.php?ordenar=Habitaciones.

Código HTML:
Ver original
  1. <a href="mostrar.php?ordenar=Habitaciones">Ordenar por Habitaciones</a>
  2.  
  3. o con un input button
  4.  
  5. <input type="button" value="Ordenar por Habitaciones" onclick="location.href='mostrar.php?ordenar=Habitaciones';"/>

Bueno eso era todo y espero que te sirva.

Última edición por Vector_Latino; 02/05/2012 a las 18:20
  #5 (permalink)  
Antiguo 04/05/2012, 01:36
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 meses
Puntos: 7
Respuesta: Ordenar tabla con botones

Muchas gracias a los dos, lo voy a probar y os digo algo.

Un saludo.
  #6 (permalink)  
Antiguo 04/05/2012, 14:27
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 meses
Puntos: 7
Respuesta: Ordenar tabla con botones

No lo he podido probar porque me da 2 errores:
El primero es:
Cita:
Notice: Undefined index: ordenar in C:\wamp\www\Inmobiliaria\Index.php on line 103
En dicha linea lo que hay es:
Código PHP:
102 $sql "SELECT SQL_CALC_FOUND_ROWS * FROM venta";        
103 $sql .= " ORDER BY ".$_GET['ordenar']." ASC "//es en esta linea la que indica el error
104 $sql .= 'LIMIT 5' 
entonces lo que he hecho ha sido definir la variable al principio de al web despues de la conexion con la base de datos de la siguiente manera:
Código PHP:
$ordenar = isset($_GET["ordenar"])? $_GET["ordenar"]: ''
El segundo error es:
Cita:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC LIMIT 5' at line 1
este segundo error lo da en la misma parte de la consulta "ASC LIMIT 5" he probado varias combinaciones de comillas pero no he conseguido que desaparezca el error.

Por supuesto he puesto el botón pero de momento no aparece ya que me da los errores anteriores, el código del botón es:
Cita:
<input type="button" value="Ordenar por Habitaciones" onclick="location.href='index.php?ordenar=Hab';"/>
Decirme donde esta el fallo porque no lo veo, un saludo.
  #7 (permalink)  
Antiguo 04/05/2012, 16:29
Avatar de Vector_Latino  
Fecha de Ingreso: mayo-2012
Mensajes: 25
Antigüedad: 11 años, 11 meses
Puntos: 6
Respuesta: Ordenar tabla con botones

hola, viendo el código me salte unas comillas simples.
pero de todas formas, para estar seguro de que valor te esta llegando para ordenar puedes hacer:

Código PHP:
Ver original
  1. <?php
  2.     //Linea para verificar valor de ordenar
  3.     exit($_GET['ordenar']? 'Este es el valor de ordenar: <b>'.$_GET['ordenar'].'</b>':'Vacio');
  4. ?>

Esta linea la colocas de primero en el index.php y luego colocas directamente en el navegador la ruta del index con el parámetro, ejemplo:

http://localhost/mipagina/index.php?ordenar=Hab

la pagina tendría que mostrar esto:
Este es el valor de ordenar: Hab
ya viendo que si llega el valor de ordenar, la consulta seria asi:

Código PHP:
Ver original
  1. <?php
  2.     //Linea para verificar valor de ordenar
  3.     //exit($_GET['ordenar']? 'Este es el valor de ordenar: <b>'.$_GET['ordenar'].'</b>':'Vacio');
  4.    
  5.     $ordenar = isset($_GET["ordenar"])?$_GET["ordenar"]:'acá puede colocar un valor por defecto';
  6.    
  7.     $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM venta";
  8.     $sql .= " ORDER BY '".$_GET['ordenar']."' ASC ";
  9.     $sql .= "LIMIT 5" ;
  10. ?>

la vez pasada se me olvido colocar las comillas simples a " ORDER BY '".$_GET['ordenar']."' ASC ", pero ahora ya esta bien.
con esto te debería funcionar.

espero que ahora si te sirva saludos.
  #8 (permalink)  
Antiguo 04/05/2012, 18:13
 
Fecha de Ingreso: enero-2011
Ubicación: España
Mensajes: 222
Antigüedad: 13 años, 2 meses
Puntos: 7
Respuesta: Ordenar tabla con botones

Muchisimas gracias Vector_Latino.

Funciona perfectamente, ademas ahora sin las comillas va de lujo, misterios de la programación:
Cita:
$sql .= " ORDER BY ".$_GET['ordenar']." ASC ";
Bueno lo que voy a intentar ahora es que en lugar de poner un montón de botones para ordenar por varios campos voy a poner un select que se llenara de una tabla con 3 campos esta es la tabla
Cita:
"Id_Orden"------------"Descrip_Orden" -------------------- "Ordenacion"
1 ------------------ Precio (Menor a Mayor)----------------- Precio ASC
2 ------------------ Precio (Mayor a Menor)----------------- Precio DESC
3 ------------------ Hab (Menor a Mayor)------------------- Hab ASC
4 ------------------ Hab (Mayor a Menor)------------------- Hab DESC
etc...
y que al seleccionar una de las opciones del select ordene la tabla por la opcion seleccionada, enviando el valor que se encuentra en el campo Ordenacion a la variable $ordenar

Este es mi select de momento:
Código PHP:
    <FORM NAME="Ordenar">
 
<select name="ordenar" id="ordenar"  size="1"  class="Guias2"
                    onChange="if(options[selectedIndex].value)
                    window.location.href=
                    (options[selectedIndex].value)"> 
 

                    
<?php
$tablaordenar 
mysql_query("SELECT * FROM ordenar ORDER BY Ordenacion ASC"); 
while (
$registroordenar mysql_fetch_array($tablaordenar)) { ?>
<option value="<?php echo $registroordenar['Ordenacion']; ?>">&nbsp;<?php echo $registroordenar['Descrip_Orden']; ?></option>

<?php

mysql_free_result($tablaordenar); // se libera la memoria usada por la tabla
    
?>
</select>
    
 
</FORM>
De momento me da unos errores similares a los que me daba con el botón y al seleccionar una opcion me manda fuera de la página, voy a intentar encontrar la solución porque de esta manera queda mas elegante.

De nuevo te doy las gracias por tu ayuda, un saludo

Última edición por unexes; 04/05/2012 a las 18:19
  #9 (permalink)  
Antiguo 06/05/2012, 14:17
Avatar de Vector_Latino  
Fecha de Ingreso: mayo-2012
Mensajes: 25
Antigüedad: 11 años, 11 meses
Puntos: 6
Respuesta: Ordenar tabla con botones

de nada

Etiquetas: botones, registros, sql, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:03.