Foros del Web » Programando para Internet » PHP »

problema al construir una query

Estas en el tema de problema al construir una query en el foro de PHP en Foros del Web. Creo que este es el post donde debe ir esta consulta, si no, ruego reubicarlo en el hilo corespondiente! Llevo 5 días comiéndome la cabeza, ...
  #1 (permalink)  
Antiguo 03/08/2013, 04:43
 
Fecha de Ingreso: agosto-2013
Mensajes: 1
Antigüedad: 10 años, 8 meses
Puntos: 0
problema al construir una query

Creo que este es el post donde debe ir esta consulta, si no, ruego reubicarlo en el hilo corespondiente!

Llevo 5 días comiéndome la cabeza, a ver si logro explicarme. Tengo la siguiente tabla para una especie de servicio de mensajería:

[ id ] [ usuario_origen ] [ usuario_destino ] [ fecha ] [ mensaje ] [ visto_destino ]


Objetivo: QUIERO SACAR LOS ÚLTIMOS 10 ID CON LOS QUE HA CONTACTADO UN USUARIO.
Hay tres escenarios posibles:
- Usuario activo es receptor
- Usuario activo es emisor
- Usuario activo es receptor y emisor (en diferentes registros).

El problema es que el user activo puede estar en ambos lados ,usuario_origen y usuario_destino , pero desde que aparezca en uno de esos lados ya el otro usuario no debe volver a tenerse en cuenta!!!!

Condiciones: Sea fácil usar el LIMIT para ir haciendo búsquedas por bloques, los 10 últimos, los 20 últimos, ....

Actualmente tengo una solución que sabía que era 'mala' pero efectiva y resulta que NI SIQUIERA DA EL RESULTADO ESPERADO, es la siguiente:

1ª) Hago un conteo total de los ids únicos:

consulta_idsUnicos =" SELECT id FROM ".$tablabd_usuarios." WHERE id in
(SELECT usuario_origen
FROM ".$tablabd_mensajes."
WHERE usuario_destino = ".$id_usuario_activo." GROUP BY usuario_origen)

UNION

(SELECT usuario_destino
FROM ".$tablabd_mensajes."
WHERE usuario_origen = ".$id_usuario_activo." GROUP BY usuario_destino);";

2º) Uso ese total para añadir un LIMIT a la misma consulta y así conseguir los últimos:

1º] $comienzoLimit = $total_ids_unicos - $total_fichas_mostrar;

2º] $consulta_fichas = " SELECT id FROM ".$tablabd_usuarios." WHERE id in
(SELECT usuario_origen
FROM ".$tablabd_mensajes."
WHERE usuario_destino = ".$id_usuario_activo." GROUP BY usuario_origen)

UNION

(SELECT usuario_destino
FROM ".$tablabd_mensajes."
WHERE usuario_origen = ".$id_usuario_activo." GROUP BY usuario_destino)

LIMIT $comienzoLimit, $total_fichas_mostrar;";


PENSABA QUE LO TENÍA RESUELTO, mal resuelto pero resuelto, pero no. Lo que pasa es que tengo los ids ordenados por el PRIMER mensaje enviado y no por los últimos mensajes recibidos.

Así que me salen los últimos contactos NUEVOS que ha tenido el usuario y no los últimos contactos sean los que sean.

Si hay un usuario que le mandó un mensaje hace un mes y vuelve a enviar uno ahora mismo, este usuario no está posicionado en el último puesto sino que aparece ordenado cuando envió el primer mensaje hace un mes.

No sé si se pueden aprovechar las consultas anteriores o hacer borrón y cuenta nueva!!!
Creo que quizás tenga que empezar de cero y plantear una consulta nueva.

He intentado usar el IF dentro del SELECT pero los resultados tampoco son lo esperado...

Muchísimas gracias por la atención!

Etiquetas: construir, query, registro, select, tabla, usuarios
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 12:59.