1

概要: プロフィールと好きな映画のリストを取得したい。すべての出力が1ページに表示されます。私はmySQLとPHPを使用しており、現在ローカルホストで実行しています。理想的には、速度のために、これを1つのクエリに含める必要があります。

次のような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

また、2つ目の問題があります。ここでは、選択した映画がお気に入りであるすべてのプロファイルを一覧表示します。このページでも、プロファイルと映画を一緒に一覧表示する必要があります。この場合、私は上記のクエリを使用して以下を追加することを考えていました:

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を使用してムービーを1つの列に結合することを検討してください。

于 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 に答える