Без примеров данных, примера вывода и описания желаемого выхода трудно быть уверенным в том, что вам нужно.
Однако я замечаю, что ваш подзапрос (PostFlags) содержитСтол сообщений, как и ваш основной запрос.И они даже имеют один и тот же псевдоним.
Из этого я могу сделать вывод, что вы хотите получить одну из двух вещей ...
Количество всех флагов для всех сообщений
Это даст одинаковое значение для каждой записи в ваших результатах
Количество всех флагов длятекущее сообщение
Это даст другое значение для каждой записи в ваших результатах
Если вы хотите первую версиюЯ бы изменил псевдонимы подзапроса.Вместо использования «P» используйте «Px» или что-то еще.Я не думаю, что это обязательно что-то изменит, но использование того же псевдонима, что и основной запрос, может запутать читателя, не говоря уже о СУБД.
Если вам нужна версияво-вторых, вам не нужно включать соединение в подзапрос.Вместо этого вы можете сделать следующее ...
SELECT
p.PostPID, p.PostUID, p.PostText, p.PostTime, u.UserUID, u.UserName, u.UserImage, u.UserRep,
(
SELECT COUNT(FlagTime)
FROM Flags
WHERE FlagPID = p.PostPID
) as PostFlags
FROM
Posts AS p
JOIN
Users AS u
ON p.PostUID = u.UserUID
ORDER BY
PostTime DESC
LIMIT 0, 30
Предложение where теперь ссылается на таблицу Posts из основного запроса.Это становится Correlated-Sub-Query - результат варьируется в зависимости от значения поля в другой таблице.
Если ни один из них не является тем, что вам нужно, приведите примеры;
- Пример данных
- Пример результатов
- Ожидаемые результаты
- Описание причин, по которым они ожидаются