Foros del Web » Programando para Internet » PHP »

Ordenar resultados con determinados criterios especiales

Estas en el tema de Ordenar resultados con determinados criterios especiales en el foro de PHP en Foros del Web. Hola, tengo una pagina donde se muestran los resultados de una busqueda ordenados según un paginador y unos criterios como pueden ser fecha, distancia, metros... ...
  #1 (permalink)  
Antiguo 04/11/2009, 06:31
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años, 6 meses
Puntos: 18
Ordenar resultados con determinados criterios especiales

Hola, tengo una pagina donde se muestran los resultados de una busqueda ordenados según un paginador y unos criterios como pueden ser fecha, distancia, metros... todo esto me funciona, pero ahora quiero implementar cuentas premium en mi web y quiero que las cuentan premium se muestren las primeras a la hora de mostrar los resultados segun la ordenación y las que no son premium las ultimas, es decir por ejemplo, supongamos que tengo en la base cuatro registros, dos premium y dos que no sean de la siguiente manera:

registro 1 premium -- fecha 31 de octubre
registro 2 no premium -- fecha 2 de noviembre
registro 3 premium -- fecha 3 de noviembre
registro 5 no premium -- fecha 4 de noviembre

Al ordenarlos por fecha lo suyo es que aparecieran en el orden establecido anteriormente, pero yo quiero que aparezcan en este orden debido que quien paga premium ha de salir primero:

registro 1 premium -- fecha 31 de octubre
registro 3 premium -- fecha 3 de noviembre
registro 2 no premium -- fecha 2 de noviembre
registro 5 no premium -- fecha 4 de noviembre

Ya que ellos tienen premium, la diferencia de tener premium a no tenerla es que en mi base de datos hay un campo llamado premium y puede estar a 0 o a 1 segun no la tengan o la tenga respectivamente.


Alguien me puede decir como puedo solucionar esto?



Gracias de antemano y un saludo
  #2 (permalink)  
Antiguo 04/11/2009, 06:37
Avatar de Fairy_Boy  
Fecha de Ingreso: octubre-2009
Ubicación: Kokiri Forest
Mensajes: 235
Antigüedad: 15 años, 1 mes
Puntos: 5
Respuesta: Ordenar resultados con determinados criterios especiales

una idea es, al hacer la consulta, ponerle ORDER BY campo_premiun ASC ó DESC.
=)
  #3 (permalink)  
Antiguo 04/11/2009, 06:43
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Ordenar resultados con determinados criterios especiales

Hola

Si tienes la posibilidad de cambiar la manera de saber si una cuenta es premium o no, sería realmente fácil. Aquellas cuentas que sean premium (0), las no lo sean (1). De tal manera que la consulta seria algo como

Cita:
"select ............ order by tipo_cuenta, fecha asc"
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 04/11/2009, 06:44
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años, 6 meses
Puntos: 18
Respuesta: Ordenar resultados con determinados criterios especiales

Cita:
Iniciado por Fairy_Boy Ver Mensaje
una idea es, al hacer la consulta, ponerle ORDER BY campo_premiun ASC ó DESC.
=)

Si, pero se puede hacer order by con dos criterios? porque como dije arriba es un paginador y un organizador, que se paginan resultados y a la vez puedes ordenarlos segun fecha, metros, distancia... y si los ordenas por otro campo distinto tambien quiero que los premium me aparezcan los primeros, es decir, ordenar primero los premium por distancia por ejemplo y luego ordenar los no premium tambien por distancia y necesito que todo esto quede en una misma consulta para no estropear el paginador, por ejemplo, si tengo 20 registros de los cuales 11 son premium y mi paginador avanza de 10 en 10 la primera pagina siempre sera premium y la segunda el primero que salga si y los demas no.

Gracias por el aporte Fairy_Boy


___________________________________

Edito porque he visto el post de Adler, gracias Adler ;) una pregunta, yo puedo decirle que siempre el orden de el campo premium sea ascendente y el de fecha ascendente o descendente? o los dos tienen que llevar el mismo orden ascendente y descendente, si es lo primero me vale perfectamente pero el segundo tendriamos el problema, ya que el usuario, al cambiar el orden saldrian los ultimos.
  #5 (permalink)  
Antiguo 04/11/2009, 06:50
Avatar de Fairy_Boy  
Fecha de Ingreso: octubre-2009
Ubicación: Kokiri Forest
Mensajes: 235
Antigüedad: 15 años, 1 mes
Puntos: 5
Respuesta: Ordenar resultados con determinados criterios especiales

como dice Adler, se puede hacer de 2.
otra opcion es que en los titulos de cada columna o como lo tengas tu,
al hacerle clic te los ordene. ahi te los ordenaria segun lo que decees.
pero tendrias que aplicar ajax.
saludos!
  #6 (permalink)  
Antiguo 04/11/2009, 06:58
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años, 6 meses
Puntos: 18
Bueno lo he solucionado de la siguiente manera:

$result = mysql_query("SELECT * FROM general where provincia = '$provincia' ORDER BY premium DESC, $sitio $ascdesc LIMIT $primero, $segundo",$link);

donde las variables que veis en el select son el orden que le pone el usuario con el paginador y el paginador en si, asi primero siempre saldrán los premium y luego los demas.

Muy agradecido a ambos ^^

Dije que lo habia solucionado pero no, no lo solucioné, porque al hacer lo que puse anteriormente:

$result = mysql_query("SELECT * FROM general where provincia = '$provincia' ORDER BY premium DESC, $sitio $ascdesc LIMIT $primero, $segundo",$link);


solo se me ordenan por premium asi que sigo teniendo el mismo problema, es decir supongamos que queda asi:


$result = mysql_query("SELECT * FROM general where provincia = murcia ORDER BY metros DESC, cartagena asc LIMIT 10, 20",$link)

No se me ordena por metros, solo por premium


Estuve leyendo por el foro y google y vi algo llamado suconsultas, esto me podria servir?

Última edición por GatorV; 04/11/2009 a las 12:16
  #7 (permalink)  
Antiguo 04/11/2009, 07:18
Avatar de Fairy_Boy  
Fecha de Ingreso: octubre-2009
Ubicación: Kokiri Forest
Mensajes: 235
Antigüedad: 15 años, 1 mes
Puntos: 5
Respuesta: Ordenar resultados con determinados criterios especiales

si no me equivoco, deberia se asi.
$result = mysql_query("SELECT * FROM general where provincia = murcia ORDER BY metros, cartagena DESC LIMIT 10, 20",$link)
=)
  #8 (permalink)  
Antiguo 04/11/2009, 07:24
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años, 6 meses
Puntos: 18
Respuesta: Ordenar resultados con determinados criterios especiales

Cita:
Iniciado por Fairy_Boy Ver Mensaje
si no me equivoco, deberia se asi.
$result = mysql_query("SELECT * FROM general where provincia = murcia ORDER BY metros, cartagena DESC LIMIT 10, 20",$link)
=)
Pero... y el premium? :S

Si la consulta estaba bien hecha, el tema es que a la hora de incorporar la ordenacion por premium solo se basaba en cogerme la ordenacion por premium las otras las ignoraba.

Como bien dije lo necesito algo asi:

$result = mysql_query("SELECT * FROM general where provincia = '$provincia' ORDER BY premium DESC, metros ASC LIMIT $primero, $segundo",$link);

pero esa consulta, a la hora de ejecutarla se me iguala a:

$result = mysql_query("SELECT * FROM general where provincia = '$provincia' ORDER BY premium DESC LIMIT $primero, $segundo",$link);

Despreciando el metros ASC
  #9 (permalink)  
Antiguo 04/11/2009, 07:35
Avatar de Fairy_Boy  
Fecha de Ingreso: octubre-2009
Ubicación: Kokiri Forest
Mensajes: 235
Antigüedad: 15 años, 1 mes
Puntos: 5
Respuesta: Ordenar resultados con determinados criterios especiales

mmmm =/
la verdad es que no le pillo el problema.
lee un poco eso : http://www.asptutor.com/sql/sql2.asp
ahi aparece soble el odenamiento order by con 2 campos.
en el caso de que no te funcione, podrias probar con group by.
Saludos!
  #10 (permalink)  
Antiguo 04/11/2009, 08:02
Avatar de karlic0s  
Fecha de Ingreso: abril-2007
Ubicación: Cartagena (Murcia)
Mensajes: 241
Antigüedad: 17 años, 6 meses
Puntos: 18
Respuesta: Ordenar resultados con determinados criterios especiales

Siento el ser pesado y postear tantas veces, pero necesito que me entienda :P

Gracias por la ayuda Fairy_Boy

Explico desde el principio, supongamos que tengo estos registros:

- Registro 1 Premium SI --- fecha 25 de octubre
- Registro 2 Premium NO --- fecha 26 de octubre
- Registro 3 Premium SI --- fecha 27 de octubre
- Registro 4 Premium NO --- fecha 28 de octubre
- Registro 5 Premium NO --- fecha 29 de octubre
- Registro 6 Premium NO --- fecha 30 de octubre
- Registro 7 Premium NO --- fecha 31 de octubre

A la hora de ordenar por premium y fecha quiero que se me quede asi:

- Registro 1 Premium SI --- fecha 25 de octubre
- Registro 3 Premium SI --- fecha 27 de octubre
- Registro 2 Premium NO --- fecha 26 de octubre
- Registro 4 Premium NO --- fecha 28 de octubre
- Registro 5 Premium NO --- fecha 29 de octubre
- Registro 6 Premium NO --- fecha 30 de octubre
- Registro 7 Premium NO --- fecha 31 de octubre

El premium debe de ir por encima de la fecha y luego, como segundo criterio que se ordene por fecha o por cualquier otro parametro de la base de datos.


Tambien que funcione a la hora de paginar es decir que cuando separas en paginas de 5 en 5 por ejemplo quede asi:

Página 1:
- Registro 1 Premium SI --- fecha 25 de octubre
- Registro 3 Premium SI --- fecha 27 de octubre
- Registro 2 Premium NO --- fecha 26 de octubre
- Registro 4 Premium NO --- fecha 28 de octubre
- Registro 5 Premium NO --- fecha 29 de octubre

Página 2:
- Registro 6 Premium NO --- fecha 30 de octubre
- Registro 7 Premium NO --- fecha 31 de octubre


Al hacerlo asi:
$result = mysql_query("SELECT * FROM general where provincia = '$provincia' ORDER BY premium DESC, fecha ASC LIMIT $primero, $segundo",$link);

No me coje primero el premium y luego la fecha, simplemente me coje la fecha.

Gracias por sus respuestas, es de reconocer la dedicacion que le estan poniendo a mi tema, gracias ^^
  #11 (permalink)  
Antiguo 04/11/2009, 08:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 10 meses
Puntos: 126
Respuesta: Ordenar resultados con determinados criterios especiales

Hola

El problema es que estás haciendo dos ordenaciones. Algo que comentastes en post anteriores te puede ayudar. Hacer subconsultas con el predicador IN

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #12 (permalink)  
Antiguo 04/11/2009, 12:26
Avatar de Nanox  
Fecha de Ingreso: octubre-2008
Ubicación: Apizaco/Tlaxcala/Mexico
Mensajes: 20
Antigüedad: 16 años
Puntos: 0
Respuesta: Ordenar resultados con determinados criterios especiales

colega.. ps ponle asi..el primer orden debe ser (premium='SI')

$result = mysql_query("SELECT * FROM general where provincia = '$provincia' ORDER BY premium='SI' DESC, fecha ASC LIMIT $primero, $segundo",$link);

le he hecho y finciona.... saludsss
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 22:12.