Почему дублируются данные после выборки с БД MySQL, при использовании 3-х JOIN`ов?
Здравствуйте.
Есть 3 таблицы. Users, Posts, и Likes.
Когда я использую JOIN (Posts+Users) работает всё корректно.
Но, когда подключаю ЕЩЁ и таблицу LIKES, то данные дублируются по количеству лайков к таблице: Posts.
т.е. если запись (post) имеет 15 лайков, то этот пост будет выбран 15 раз.
Помогите решить проблему.
P.S.
Таблицы: Users - имеет user_id(уникальный ID пользователя) Posts - имеет post_id, (уникальный ID записи) и post_user(автор записи, который связывается с users.user_id) и таблица Likes у которой есть всего 3 столбца (likes.like_user - автор лайка, likes.like_id (ID объекта) и likes.like_object( тип объекта - запись, статья, видео или фото)
Надеюсь не слишком мутно написал. Заранее благодарю)
а какой результат вы хотите получить от этого тройного джойна? Допустим, для простоты, 1 юзер, у него 10 постов, у каждого в среднем по 10 лайков - что должно быть-то в итоге?
galaxy, хочу что-бы можно было отмечать пост, который имеет лайк пользователя просматривающего данную ленту записей.
Просто идёт дублирование этих записей по количеству лайков.
К примеру у одной записи есть 10 лайков, в итоге MYSQL мне возвращает запись, 10 раз. Как мне исключить эти копии при выборке с БД.
galaxy, вот как выглядит запрос "SELECT `posts`.`p_id`, `users`.`u_id`, `posts`.`p_body`, `users`.`u_login`, `users`.`u_ava`, `posts`.`p_created_at`, `posts`.`p_views`, `posts`.`p_likes`, `posts`.`p_com` FROM `posts` JOIN `users` ON `posts`.`p_user` = `users`.`u_id` LEFT JOIN `likes` ON `posts`.`p_id` = `likes`.`l_object` ORDER BY `p_created_at` DESC LIMIT 20
Повторюсь ещё. Всё работает верно, но когда делаю JOIN таблицы Likes, получаю запись равную количеству лайков.)
Может я не правильно делаю операции с JOIN-ами ? )
Александр Тищенко, ну а где у вас условие "пост, который имеет лайк пользователя просматривающего данную ленту записей"? Вы сейчас просто приджойниваете ВСЕ лайки к каждому посту.
... LEFT JOIN `likes` ON `posts`.`p_id` = `likes`.`l_object` AND `likes`.`like_user` = <current_user_id> ...
galaxy, проблема решена) но теперь другая, "AND likes.like_user = " здесь же я на сколько понял, должен быть users.user_id ? ) если да, то под "like_user" попадают разные "user_id")
если что, можешь не отвечать, не хочу надоедать, своей тупостью...
здесь же я на сколько понял, должен быть users.user_id ?
нет, если сделать так, что приджойнятся лайки, которые автор поста поставил на свой пост. Тут нужен id юзера "просматривающего данную ленту" (id залогиненного юзера, видимо, если я правильно понял задачу)