Вам необходимо объединить все 3 таблицы через идентификатор пользователя.Затем вы можете выбрать самую последнюю дату публикации, группируя по идентификатору пользователя.Первоначально я также присоединился к таблице последователей, но это имеет непреднамеренный побочный эффект, поэтому ...
Что-то вроде:
SELECT U.Name AS UserName,
MAX(P.Date) AS LatestPost,
(SELECT COUNT(F.userNameFollower) FROM Followers WHERE userID = U.userID) AS FollowerCount
FROM User U
INNER JOIN Post P ON (U.userID = P.userID)
GROUP BY U.UserID
Должно работать.
Обратите внимание, что мой запрос предполагает, что пользователь опубликовал.Если этого не произошло, измените INNER JOIN на LEFT JOIN.
Причина, по которой исходный запрос не работает, состоит в том, что он соответствует строке в Post для каждого пользователя и строке в Followers для каждого пользователя.- таким образом, умножая количество результатов.Вместо этого мы можем использовать подзапрос, чтобы выбрать количество подписчиков с совпадающим идентификатором пользователя в таблице User.
HOWEVER ... это только подсчитывает общее число подписчиков, которое имеет пользователь,не количество подписчиков на пост.Причина этого в том, что вы только связали подписчика с пользователем.Вы также должны иметь отношения между Фолловером и Постом.
Вы можете сделать это несколькими способами;Вы можете создать таблицу PostFollower, состоящую из PostId и UserId (чтобы вы могли видеть, какой пользователь следил за каждым сообщением), или вы можете добавить PostId в таблицу Follower и сохранить userId подписчика и PostId, что позволит вам сохранить, за каким пользователемкакие сообщения.