Para obtener todas las publicaciones de un usuario determinado (id =145) y todos los usuarios a los que sigue, junto con los detalles del usuario para cada publicación, reescribiría la consulta para usar union
en lugar de la o, simplificando así la lógica. La primera selección obtiene las publicaciones del usuario dado, la segunda obtiene las publicaciones de los usuarios que está siguiendo:
(SELECT P.id as postid,
P.caption,
P.date,
U.id as userid,
U.fullname,
U.username,
FROM USERS AS U
INNER JOIN Posts AS P ON P.userid = U.id
WHERE U.id = 145)
UNION
(SELECT P.id,
P.caption,
P.date,
U.id,
U.fullname,
U.username,
FROM Activity AS A
INNER JOIN USERS AS U ON A.IdOtherUser=U.id
INNER JOIN Posts AS P ON P.userid = U.id
WHERE A.id = 145)
ORDER BY postid DESC
Suposiciones:
-
El campo Activity.id representa al usuario, que sigue al otro usuario. De lo contrario, debe cambiar el nombre del campo por el apropiado.
-
Inventó el campo de ID de usuario de la tabla Publicaciones que representa al usuario que publicó la publicación. Utilice el nombre de campo correcto en su lugar.