php - mySQL 在一个查询但三个表中使用复杂连接列出配置文件和电影

标签 php mysql subquery left-join inner-join

概述: 我想获得个人资料列表和他们喜欢的电影。所有输出显示在一页上。我正在使用 mySQL 和 PHP,目前在本地主机上运行。理想情况下,为了速度,我希望它在一个查询中。

mySQL中的数据库表概览如下:

profile_tbl:
> id
> username
> about me
> gender
> hobbies
> profile_pic
> last_login


movies_tbl:
> id
> movie_name
> genre
> length
> rating
> description


profile_movies_rel_tbl
> id
> movie_id
> profile_id

输出:

我想显示 10 个个人资料和他们喜欢的所有电影的列表。我在想以下查询:

SELECT  profile_tbl.*, movies_tbl.* FROM profile_tbl
LEFT JOIN profile_movies_rel_tbl
ON profile_movies_rel_tbl.movie_id = movies_tbl.id
LEFT JOIN profile_tbl
ON profile_tbl.id= profile_movies_rel_tbl.profile_id LIMIT 10

我还有第二个问题,我想列出所有选择了喜欢的电影的个人资料,页面应该同时列出个人资料和电影。 在这种情况下,我正在考虑使用上述查询并添加以下内容:

WHERE profile_movies_rel_tbl.movie_id = 4

任何人需要更多信息,请发表评论。

谢谢

最佳答案

我认为您想在子查询中使用 LIMIT 来返回 10 个不同的配置文件:

SELECT  profile_tbl.*, movies_tbl.* 
FROM (
     SELECT DISTINCT Id FROM profile_tbl LIMIT 10
    ) LimitTable
    INNER JOIN profile_tbl ON profile_tbl.Id=LimitTable.Id
    LEFT JOIN profile_movies_rel_tbl
        ON profile_movies_rel_tbl.profile_id = profile_tbl.id
    LEFT JOIN movies_tbl
        ON profile_movies_rel_tbl.movie_id = movies_tbl.id

这可能会返回超过 10 行,但它应该只包含 10 个配置文件。

如果您想要返回 10 行,然后考虑使用 GROUP_CONCAT 将您的电影合并到一个列中。

关于php - mySQL 在一个查询但三个表中使用复杂连接列出配置文件和电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178181/

相关文章:

php - 我如何使这个查询 sql 注入(inject)证明?

javascript - emit() 不工作 [Node.js]

MySQL 当连接左 3 个表时结果为 NULL

MySQL 问题 - 查找某人评分为 5 星而其他人评分少于 3 星的每部电影的标题和年份

mysql - 在mysql中为每个子查询插入多行

php - 添加到 PHP 中的循环而不覆盖

MySQL如何根据日期将两列加/减?

php - 通过SQL获取订单数超过2次但登录次数少于3次的客户

sql - 子查询 - 获得最高分

php - 状态 404 : ZF3 and Nginx