Считайте, что он возвращает один результат [дубликат]

avatar
Dan
8 апреля 2018 в 07:40
18
1
0

Я работаю над проектом, в котором мне нужно получить всех пользователей, которым понравился пост, их имя пользователя и другую информацию.

Я попытался создать запрос на соединение следующим образом

$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 через все из них.

Я делаю что-то не так, чтобы получить все как один результат?

Источник
krokodilko
8 апреля 2018 в 07:49
0

Добавьте GROUP BY U.id, U.name, U.username, U.verified, U.private в конце запроса. Дополнительные сведения см. в разделе GROUP BY.

Ответы (1)

avatar
Dario
8 апреля 2018 в 07:49
1

Вы должны добавить предложение GROUP BY, если хотите выполнять агрегирование по разделам, а не по таблицам целиком. Попробуйте добавить

GROUP BY U.id, U.name, U.username, U.verified, U.private

в конце вашего запроса.