1

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

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

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

谢谢

4

2 回答 2

1

我认为您想在子查询中使用 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 将您的电影组合成一列。

于 2013-03-02T19:04:18.703 回答
0

您可以为此简单地使用连接。并且使用 GROUP_CONCAT 将为您提供所有电影的列表,但以逗号分隔。您可以使用 php explode 函数进行爆炸,它会在数组中为您提供结果。比您可以使用循环该数组来显示电影名称

SELECT 
    pt.*,
    GROUP_CONCAT(movie_name) AS `Movies`
FROM profile_tbl AS pt
INNER JOIN profile_movies_rel_tbl AS pmrt ON pmrt.profile_id = pt.id
INNER JOIN movies_tbl AS mt ON mt.id = pmrt.movie_id
GROUP BY pt.id
    LIMIT 10
    ORDER BY pt.id DESC
于 2013-03-02T19:10:52.630 回答