Я работаю над проектом, где мне нужно получить всех пользователей, которым понравилась почта, их имя пользователя и другая информация.
Я попытался создать запрос на соединение так
$sql = "SELECT U.id AS userid, U.name AS NAME, U.username AS username,
U.verified AS verified, U.private AS private,
COUNT(IFOLLOW.user_id) AS i_follow,
COUNT(FR.user_id) AS requested
FROM posts AS P
LEFT JOIN likes AS L ON L.post_id = :postid
LEFT JOIN users AS U ON U.id = L.user_id
LEFT JOIN followers AS IFOLLOW
ON IFOLLOW.user_id = :userid AND IFOLLOW.following_id = U.id
LEFT JOIN follow_requests AS FR
ON FR.requester = :userid AND FR.user_id = U.id WHERE P.id = :postid";
Я использую COUNT()
для подсчета, если пользователь следит/просит следовать за тем, кто просматривает список со списком. Если он говорит 1, это означает, что они следуют/запрашивают их, если 0 нет. Проблема в том, что когда я включаю методы подсчета, он возвращает это как один результат. Когда я не включаю счет, он возвращает несколько, поэтому я могу запустить foreach
через все их.
Я делаю что-то неправильно, чтобы сделать все это одним из результатов?
Вы должны добавить предложение GROUP BY
, если вы хотите агрегировать разделы, а не по всем таблицам. Попробуйте добавить
GROUP BY U.id, U.name, U.username, U.verified, U.private
в конце вашего запроса.
GROUP BY U.id, U.name, U.username, U.verified, U.private
в конце запроса. См. Предложение GROUP BY для более подробной информации.