Código SQL:
Ver originalSELECT * FROM mensajes
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:
Esta sería la idea para MySQL. En otros DBMS la sintaxis puede cambiar.
Agregando lo aclarado por andresdzphp, sería: