Um alle Posts eines bestimmten Benutzers (id=145) und alle Posts der Benutzer, denen er folgt, zusammen mit den Benutzerdetails für jeden Post zu erhalten, würde ich die Abfrage so umschreiben, dass sie union
verwendet anstelle des oder, wodurch die Logik vereinfacht wird. Die erste Auswahl erhält die Posts des angegebenen Benutzers, die zweite die Posts der Benutzer, denen sie folgt:
(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
Annahmen:
-
Das Feld Activity.id repräsentiert den Benutzer, der dem anderen Benutzer folgt. Wenn nicht, müssen Sie den Feldnamen entsprechend ändern.
-
Das userid-Feld der Posts-Tabelle wurde erfunden, das den Benutzer darstellt, der den Post gepostet hat. Bitte verwenden Sie stattdessen den korrekten Feldnamen.