使用MySQL / Laravel查询生成器保留所有连接数据,同时过滤掉重复项

时间:2016-03-26 02:57:08

标签: mysql laravel join

我正在Laravel开发一个电影跟踪应用,我目前在Ratings上试图加入Movies,但我想我几乎就在那里我只是我不知道如何准确到达我想去的地方。

这是我当前的工作查询(使用->toSql(),但它在我的应用中是一个雄辩的查询):

SELECT 
    `movies`.*,
    `ratings`.`user`,
    `ratings`.`favorite`,
    `ratings`.`created_at` AS `rating_created_at`,
    `ratings`.`updated_at` AS `rating_updated_at`,
    `users`.`id` AS `user_id`,
    `users`.`name` AS `user_name`
FROM
    `movies`
        INNER JOIN
    `ratings` ON `movies`.`tmdb_id` = `ratings`.`tmdb_id`
        INNER JOIN
    `users` ON `ratings`.`user` = `users`.`id`
WHERE
    `ratings`.`favorite` = 1
GROUP BY `ratings`.`tmdb_id`
ORDER BY `ratings`.`created_at` DESC

以下是问题所在:

由于多人可以收藏电影,因此其输出会为每部具有匹配评分行的电影显示重复的电影:ratings.user

我想要的是什么:

  • 一次显示收藏的电影
  • 能够通过ratings.user列知道谁喜欢该电影,并在电影中显示他们的名字
  • 如果多个用户已收藏同一部电影,则仍可以访问所有用户数据

我感到困惑的是如何能够获取与给定电影相关联的所有用户数据,而不会重复其返回。

编辑:我更新了我的SQL查询以包含用户表,以便我可以访问他们的名字,但具体而言,上面的第3点仍然是一个问题。

0 个答案:

没有答案