Aby uzyskać wszystkie posty danego użytkownika (id=145) i wszystkich użytkowników, których śledzi, wraz ze szczegółami użytkownika dla każdego postu, przepisałbym zapytanie, aby użyć union
zamiast lub, upraszczając w ten sposób logikę. Pierwszy wybór pobiera posty danego użytkownika, drugi pobiera posty użytkowników, których śledzi:
(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
Założenia:
-
Pole Activity.id reprezentuje użytkownika, który podąża za innym użytkownikiem. Jeśli nie, musisz zmienić nazwę pola na odpowiednią.
-
Wymyślono pole identyfikatora użytkownika w tabeli Posts reprezentujące użytkownika, który opublikował post. Pls użyj prawidłowej nazwy pola w jej miejscu.