2013-03-02 87 views
1

概述: 我想獲得配置文件和他們喜歡的電影列表。所有輸出將顯示在一個頁面上。我在本地主機上運行時使用mySQL和PHP。理想情況下,我希望這是在一個查詢,速度。在MySQL的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 

任何一個需要更多的信息,請留下評論。

感謝

回答

1

我想你想使用限制子查詢返回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將您的電影組合成單個列。

0

你可以簡單地使用這個連接。使用GROUP_CONCAT將 給你一個所有電影的列表,但逗號分隔。你可以使用php爆炸函數 來爆炸,它會給你一個數組的結果。 比你可以使用循環該數組顯示電影名稱

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