Pour obtenir tous les messages d'un utilisateur donné (id =145) et tous les utilisateurs qu'il suit, ainsi que les détails de l'utilisateur pour chaque message, je réécrirais la requête pour utiliser union
au lieu du ou, simplifiant ainsi la logique. La 1ère sélection récupère les publications de l'utilisateur donné, la 2ème récupère les publications des utilisateurs qu'elle suit :
(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
Hypothèses :
-
Le champ Activity.id représente l'utilisateur qui suit l'autre utilisateur. Si ce n'est pas le cas, vous devez remplacer le nom du champ par celui qui convient.
-
Inventé le champ userid de la table Posts représentant l'utilisateur qui a posté la publication. Veuillez utiliser le nom de champ correct à sa place.