Foros del Web » Programando para Internet » PHP »

Ordenar listado por varios campos

Estas en el tema de Ordenar listado por varios campos en el foro de PHP en Foros del Web. Hola, mi idea es la siguiente: Tengo una busqueda que me muestra un listado con varios resultados. He creado un boton de tipo Select, en ...
  #1 (permalink)  
Antiguo 27/08/2010, 12:20
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Ordenar listado por varios campos

Hola, mi idea es la siguiente:

Tengo una busqueda que me muestra un listado con varios resultados.

He creado un boton de tipo Select, en el cual puedo elegir ordenar resultados por nombre, precio o año.


Lo que quiero hacer es que segun elija una de las opciones, el listado se me actualice automaticamente la lista que tengo debajo.

Es decir, yo tengo:

Código:
	        ORDENAR POR:
		<select name="orden">
		<option value="ord"> Elija una opción </option>
		<option value="orden1"> Nombre </option>
		<option value="orden2"> Precio </option>
		<option value="orden3"> Sistema </option>
		<option value="orden4"> Año </option>
		</select>

Y quiero eso, que automaticamente se actualice la pagina con el tipo de orden escogido, sin necesidad de enviar los datos, con lo cual quizas no se pueda hacer por un formulario y necesite javascript, no estoy seguro de eso, a ver si alguien puede ayudarme.

Gracias!
  #2 (permalink)  
Antiguo 27/08/2010, 12:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ordenar listado por varios campos

La solucion a tu problema se me ocurre usando AJAX.

necesitarias dos archivos PHP.

En uno pones el formulario de busqueda y el tipo de orden que se le quiera dar.
En otro, haces la logica: consultas a la base de datos (o donde sea) y generas el contenido en XML ordenado de la forma que fue pedida.
El codigo AJAX deberia estar en el primer archivo PHP, ya que cuando el usuario haga click en Submit, se debe correr el codigo AJAX para consultarle al segundo PHP un XML, y cuando lo tenga, lo tienes que mostrar.

Se entiende?
  #3 (permalink)  
Antiguo 27/08/2010, 12:38
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Ordenar listado por varios campos

si existe la posibilidad, obviamente tambien puedes pedirle a la base de datos que te lo ordene por vos.
  #4 (permalink)  
Antiguo 27/08/2010, 12:42
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ordenar listado por varios campos

La verdad que no tengo ni idea de Ajax, con lo cual no se si sera muy factible esa idea......

Si no encuentro alguna otra solucion creo que lo que creare seran varios links encima del listado que al pulsarlos me lo ordene del modo elegido.


Gracias por la aportacion de todos modos
  #5 (permalink)  
Antiguo 27/08/2010, 13:39
 
Fecha de Ingreso: septiembre-2009
Mensajes: 68
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Ordenar listado por varios campos

Código PHP:
Ver original
  1. $variable = $_GET['orden'];
  2. $consulta = mysql_query("SELECT * FROM tabla ORDER BY $variable DESC", $servidor) or die(mysql_error());

De manera que si ejecutas script.php?orden=nombre la consulta se ordenara por nombre y si ejecutas script.php?orden=edad se ordenara por edad.

Podrias agregar tambien una variable en la URL determinando si la quieres ASC o DESC.

Editado: No lei el ultimo parrafo donde dices que no quieres enviar los datos. Lo siento.
  #6 (permalink)  
Antiguo 07/09/2010, 09:49
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Ordenar listado por varios campos

Si no veo solucion mejor, creo que al final lo realizaré enviando los datos, ya que creo que parece la forma mas sencilla de realizarlo.

Gracias por las respuestas compañeros :)

Etiquetas: campos, listado
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 11:45.