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

Dos criterios de orden

Estas en el tema de Dos criterios de orden en el foro de Mysql en Foros del Web. Buenas gente, vengo a consultar acá porque me estoy poniendo loco con esto, el tema es asi: Tengo una tabla Mysql con noticias, las cuales ...
  #1 (permalink)  
Antiguo 01/09/2010, 23:47
Avatar de valenti77  
Fecha de Ingreso: julio-2008
Ubicación: Berisso, Buenos Aires
Mensajes: 244
Antigüedad: 15 años, 9 meses
Puntos: 4
Dos criterios de orden

Buenas gente, vengo a consultar acá porque me estoy poniendo loco con esto, el tema es asi:

Tengo una tabla Mysql con noticias, las cuales cada una tiene una prioridad (de 1 a 3) y una fecha, que son los dos criterios mediante las cuales necesito ordenar.
  • Necesito mostrar en la página, las últimas noticias, o sea, ordenarlas por fecha
  • Pero tambien necesito ordenarlas por prioridad, ya que cada noticia según su prioridad se muestra en un lugar diferente de la pagina.

Nota:
-Tienen que ser si o si las tres ultimas noticias, pueden ser del mismo dia o no, eso depende de en que momento y que cantidad de noticias se pongan en la pagina.
-Primero tendrian que ser ordenadas por fecha, extraer las ultimas 3 mas recientes, y esas mismas ordenarlas por prioridad.


A alguno se le ocurre como lo puedo hacer?
Agradezco de antemano su ayuda, muchisimas gracias !
  #2 (permalink)  
Antiguo 02/09/2010, 02:56
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: Dos criterios de orden

Es una consulta que ordena una subconsulta:
Código MySQL:
Ver original
  1.   (SELECT * FROM tabla ORDER BY fecha DESC LIMIT 3) T1
  2. ORDER BY prioridad;
Sólo sería más complicado si hubiese que hacer una selección previa por categorías de noticias...
__________________
¿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/09/2010, 22:57
Avatar de valenti77  
Fecha de Ingreso: julio-2008
Ubicación: Berisso, Buenos Aires
Mensajes: 244
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Dos criterios de orden

Muchas gracias, todos los dias se aprende algo nuevo, ahora me fijo como va.

Saludos!
  #4 (permalink)  
Antiguo 02/09/2010, 23:06
Avatar de valenti77  
Fecha de Ingreso: julio-2008
Ubicación: Berisso, Buenos Aires
Mensajes: 244
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Dos criterios de orden

Muy bueno, me funciono perfecto, como se llama esto? es decir, para poder investigar un poco de las subconsultas, ya que no lo sabía
  #5 (permalink)  
Antiguo 03/09/2010, 03:16
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: Dos criterios de orden

Solo tiene como nombre "subconsultas", y se pueden usar en cualquier parte de una consulta, esto es, en el SELECT para obtener un valor determinado (no es muy eficiente allí porque insume más tiempo y recursos), en el FROM para realizar una preselección de una o más tablas generando una tabla virtual, o en el WHERE, para obtener valores que se usan en las condiciones...
Todos los DBMS las usan...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/09/2010, 02:18
Avatar de valenti77  
Fecha de Ingreso: julio-2008
Ubicación: Berisso, Buenos Aires
Mensajes: 244
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Dos criterios de orden

Probé el codigo, esta muy bien.

El error lo cometí yo al haber planteado el problema. Lo que necesito es tener la ultima noticia, de cada prioridad, creo que es al revez.

De esta forma, me ordena las noticias por la fecha, con el peligro de que entre las tres seleccionadas, queden dos que tengan la misma prioridad, se entiende?

SELECT * FROM noticias ORDER BY priority, fecha DESC LIMIT 3";

De esta forma las ordena como yo deseo, pero como hago para seleccionar solamente una de cada prioridad? ya que de esta forma, si hay dos de prioridad UNO, me selecciona ambas, luego pasa a la prioridad 2, y no se selecciona ninguna de prioridad 3, se entiende?

Esto es porque en la tabla tengo 2 de prioridad 1, 1 de prioridad 2, y una de 3. Por lo tanto el primer orden queda: 1,1,2,3.

PD: Hay alguna posibilidad de hacer loop/bucle o algun condicional que si ya hay una con priority = 1 pase a la 2 ? Disculpen pero es que no se SQL a fondo, solamente lo elemental.
  #7 (permalink)  
Antiguo 04/09/2010, 05:52
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: Dos criterios de orden

Cita:
, pero como hago para seleccionar solamente una de cada prioridad?
Usando GROUP BY, por supuesto. Pero como el GROUP BY debe ir antes del ORDER BY y en ese caso no te sirve (mostraría sólo el primer registro según PK), tienes que recurrir de todos modos a una subconsulta:
Código MySQL:
Ver original
  1.    (SELECT *
  2.    FROM noticias
  3.    ORDER BY priority, fecha DESC ) t
  4. GROUP BY priority
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: orden, prioridad, fechas
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 17:39.