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

Join + order by

Estas en el tema de Join + order by en el foro de Mysql en Foros del Web. SELECT a.id,a.site,b.site_id,b.real_date,count(b.id),b.id FROM unique_sites AS a LEFT JOIN sites_visits AS b ON a.id = b.site_id GROUP BY a.id ORDER BY b.id DESC tabla unique_sites: id ...
  #1 (permalink)  
Antiguo 25/09/2009, 20:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Join + order by

SELECT a.id,a.site,b.site_id,b.real_date,count(b.id),b.id
FROM unique_sites AS a
LEFT JOIN sites_visits AS b ON a.id = b.site_id
GROUP BY a.id
ORDER BY b.id DESC



tabla unique_sites:

id - site


tabla sites_visits:

id - real_date - site_id




La tabla unique_sites tiene 1 fila por sitio, mientras que la tabla sites_visits tiene 1 fila por cada visita, que se corresponde con alguna fila de la primer tabla.

Lo que quiero es que aparezcan en orden de "la última página que haya sido visitada", pero no entiendo por qué no anda. Se me está ordenando por "la página más nueva". El ORDER BY está bien, le estoy diciendo que ordene por 'id' de visita, por ahi hay que hacer el JOIN de otra forma??

Saludos

Última edición por horape; 27/09/2009 a las 20:40
  #2 (permalink)  
Antiguo 26/09/2009, 21:00
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Respuesta: Join + order by

help

como se puede hacer?
  #3 (permalink)  
Antiguo 26/09/2009, 21:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Join + order by

No tiene nada que ver el join con el order by.
Lo que puedes hacer es registrar la fecha y hora de la ultima pagina visitada y hacer un order by por fecha,

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 26/09/2009, 21:31
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Respuesta: Join + order by

la fecha tambien esta registrada, pero es lo mismo porque a mayor 'fecha' mayor 'id'

igual ya probé y no anda, me los ordena por a.id en vez de b.id

por b.id:



por b.real_date:

Última edición por horape; 26/09/2009 a las 21:41
  #5 (permalink)  
Antiguo 26/09/2009, 21:38
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Join + order by

así debe ser.
Te recomiendo vayas deshaciendo tu consulta para identificar el problema. Quita algunos campos y mira si te presenta el mismo sintoma.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 26/09/2009, 23:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Respuesta: Join + order by

probé sacando cosas una por una, solamente funciona si saco el GROUP BY, pero justamente me los deja desagrupados y no me sirve..
q consulta fea no se q pasa
lo unico q se me ocurre es que primero está haciendo el group by, y dentro de eso luego ordena (o sea no cambia nada).
Pero no se porque esto lo usé para otras cosas y andaba como yo queria
  #7 (permalink)  
Antiguo 27/09/2009, 05:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Join + order by

horape... si la agrupación la haces primero que el order by es obvio que el order by se aplica a la consulta ya agrupada.

prueba así:

Código sql:
Ver original
  1. SELECT * FROM(
  2. SELECT a.id id1,a.site,b.site_id,b.real_date,COUNT(b.id),b.id
  3. FROM unique_sites AS a
  4. LEFT JOIN sites_visits AS b ON a.id = b.site_id
  5. ORDER BY b.id DESC)T1
  6. GROUP BY T1.id1

Aunque no la haya probado, esta consulta trata de hacer primero el ordenamiento par luego agrupar.

Nos cuentas como te va,
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 27/09/2009, 12:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Respuesta: Join + order by

hmm no anda, me agrupa todos en 1 sola fila! =(




SOLUCIONADO:

SELECT *,count(c.id2) FROM (SELECT a.id id1,a.site,b.site_id,b.real_date,b.id id2
FROM unique_sites AS a
LEFT JOIN sites_visits AS b ON a.id = b.site_id
ORDER BY b.id DESC)c
GROUP BY c.id1
ORDER BY c.id2 DESC

No tiene sentido, pero funciona. Si alguien me la puede explicar se lo agradezco, ya que me parece irreproducible, y no aprendi nada de esto. =S
Aclaro que si saco cualquiera de los "order by" deja de andar como debería.

Última edición por horape; 27/09/2009 a las 21:35
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 18:57.