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

[SOLUCIONADO] Seleccionar último resultado GROUP BY

Estas en el tema de Seleccionar último resultado GROUP BY en el foro de Mysql en Foros del Web. Hola, Estoy haciendo un sistema de mensajes con PHP y MySQL. Tengo una lista larga con todos los mensajes, cada uno de ellos tiene un ...
  #1 (permalink)  
Antiguo 21/04/2013, 11:44
Avatar de PWT26  
Fecha de Ingreso: enero-2011
Mensajes: 48
Antigüedad: 13 años, 2 meses
Puntos: 2
Seleccionar último resultado GROUP BY

Hola,

Estoy haciendo un sistema de mensajes con PHP y MySQL. Tengo una lista larga con todos los mensajes, cada uno de ellos tiene un ID i pertenece a una conversación mediante ID_CONVERSACIÓN.

Quiero hacer una página para listar los menajes, de tal forma que el usuario vea las diferentes conversaciones que tiene activas y solo el último mensaje enviado en ellas. Ahora tengo lo siguiente:

Código PHP:
$query "SELECT * FROM mensajes WHERE user1 = '$userId' OR user2 = '$userId' GROUP BY id_conversacion"
Lo que me devuelve este código es la conversación, pero con el primer mensaje enviado. ¿Hay alguna forma de mostrar el último?

Saludos y gracias!
  #2 (permalink)  
Antiguo 21/04/2013, 14:08
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Seleccionar último resultado GROUP BY

No conocemos la estructura de tu tabla, más información por favor. A la próxima coloca estos temas en el foro correcto y te ayudarán expertos en mysql.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 21/04/2013, 15:04
Avatar de PWT26  
Fecha de Ingreso: enero-2011
Mensajes: 48
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Seleccionar último resultado GROUP BY

Cita:
Iniciado por andresdzphp Ver Mensaje
No conocemos la estructura de tu tabla, más información por favor. A la próxima coloca estos temas en el foro correcto y te ayudarán expertos en mysql.
La estructura de la tabla es la siguiente:

-id (identificador único del mensaje).
-id_conversacion (identifiacdor de la conversación)
-user1 (primer usuario implicado en el mensaje)
-user2 (lo mismo)
-fecha (cuando se publicó el mensaje)
-mensaje (el mensaje en si)

Por ejemplo, una conversación estará formada por varios mensajes de los anteriores, pero tendran un id_conversacion común.
  #4 (permalink)  
Antiguo 21/04/2013, 15:21
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Seleccionar último resultado GROUP BY

Creo que es algo así y el group by no te sirve en este caso.

Código MySQL:
Ver original
  1. SELECT * FROM mensajes WHERE user1 =  'usuario1' AND user2 =  'usuario2' ORDER BY id DESC LIMIT 1

Este código sería para ver la última conversación entre usuario1 y usuario2.

Ya reporté tu mensaje para que lo muevan al foro correcto.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 21/04/2013, 15:22
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: Seleccionar último resultado GROUP BY

Código SQL:
Ver original
  1. SELECT * FROM mensajes
  2. WHERE user1 = '$userId' OR user2 = '$userId' GROUP BY id_conversacion
Esto en realidad te devuelve todas las conversaciones que existan donde uno de dos usuarios determinados participe. Esa consulta te debe estar devolviendo mucha información inútil y/o no relacionada entre sí.
Si lo que quieres es saber cuál es el último mensaje de cada conversación de un usuario, entonces, primero no debes poner el User2, y luego deberás hacer una tabla derivada:
Código MySQL:
Ver original
  1.     (SELECT *
  2.     FROM mensajes
  3.     WHERE user1 = '$userId'
  4.     ORDER BY id_conversacion DESC) T1
  5. GROUP BY id_conversacion;
Esta sería la idea para MySQL. En otros DBMS la sintaxis puede cambiar.

Agregando lo aclarado por andresdzphp, sería:
Código MySQL:
Ver original
  1.     (SELECT *
  2.     FROM mensajes
  3.     WHERE user1 = '$userId' AND user2 = '$usuario2'
  4.     ORDER BY id_conversacion DESC) T1
  5. GROUP BY id_conversacion;
__________________
¿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 21/04/2013, 15:23
Avatar de PWT26  
Fecha de Ingreso: enero-2011
Mensajes: 48
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Seleccionar último resultado GROUP BY

Cita:
Iniciado por andresdzphp Ver Mensaje
Creo que es algo así y el group by no te sirve en este caso.

Código MySQL:
Ver original
  1. SELECT * FROM mensajes WHERE user1 =  'usuario1' AND user2 =  'usuario2' ORDER BY id DESC LIMIT 1

Este código sería para ver la última conversación entre usuario1 y usuario2.

Ya reporté tu mensaje para que lo muevan al foro correcto.
Si hago esto, solo me muestra un registro. Por ejemplo, si hay tres conversaciones con ids diferentes, no las veré.
  #7 (permalink)  
Antiguo 21/04/2013, 15:27
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Seleccionar último resultado GROUP BY

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1.     (SELECT *
  2.     FROM mensajes
  3.     WHERE user1 = '$userId' AND user2 = '$usuario2'
  4.     ORDER BY id_conversacion DESC) T1
  5. GROUP BY id_conversacion;
Gracias por completarla. Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 21/04/2013, 15:34
Avatar de PWT26  
Fecha de Ingreso: enero-2011
Mensajes: 48
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Seleccionar último resultado GROUP BY

Gracias a los dos, ya me está funcionando!
  #9 (permalink)  
Antiguo 21/04/2013, 15:44
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: Seleccionar último resultado GROUP BY

Cita:
Iniciado por andresdzphp
Gracias por completarla. Saludos.
Por nada

__________________
¿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: group, php, resultado, select
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:07.