3

私はPHPとPDOを使用しており、3つのテーブルを結合する情報を再収集する必要があります。

  • 写真
  • アルバム
  • album_photos

テーブルの構造は次のとおりです。

写真:

photo_id  (int)
path      (varchar)
nick      (varchar)
date      (timestamp)

アルバム

album_id   (int)
album_name (varchar)
nick       (varchar)
date       (timestamp)

album_photos

album_id (int)
photo_id (int)
nick     (varchar)
date     (timestamp)

したがって、ユーザーのニックネームが「所有者」である、各アルバムに最大5枚の写真を含むすべてのアルバムを表示したいと思います。

次のように表示されます。

album_name_1:
[photo_1]
[photo_2]
[photo_3]
[photo_4]
[photo_5]

album_name_2:
[photo_1]
[photo_2]
[photo_3]
[photo_4]
[photo_5]

このようなものはINNERJOINで作成できることしか知りませんが、3つのテーブルで作成する方法がわかりません。

私がこれを行うために得ることができる例または他の助けはありますか?

4

3 に答える 3

2
SELECT  a.*, c.date
FROM    Album a
        INNER JOIN Album_Photo b
            ON a.Album_ID = b.Album_ID
        INNER JOIN Photo c
            ON b.Photo_ID = c.Photo_ID
WHERE   c.Nick = 'owner' AND
        (
          SELECT COUNT(*) 
          FROM   album_photo d
          WHERE  b.album_id = d.album_id AND
                 d.nick = 'owner' AND
                 b.date >= d.date
        ) <= 2   // <<== change this value to 5
于 2013-03-19T06:32:29.453 に答える
1

次のようにしてみてください

"SELECT albums.*,photos.id,photos.path,photo_date as Pht_date
 FROM albums 
     JOIN album_photos 
          ON album_photos.album_id = albums.album_id
     JOIN photos 
          ON photos.photos_id = album_photos_id
"

ただし、「JOIN」に関連する写真には個別の制限を設ける必要があります。

$album_ids = "SELECT album_id FROM albums";

次に、写真の場合、クエリの好みを書く必要があります

"SELECT photos.* FROM photos 
 WHERE album_photos.album_id in (".$album_ids.") AND album_photos.nick = 'owner'
 JOIN album_photos
 ON album_photos.photo_id = photos.photos_id 
 LIMIT 0,10
 "
于 2013-03-19T06:23:33.407 に答える
1

これは、ストアドプロシージャを使用して解決できると思います。変数とループを使用して、必要なレコードを取得できます。基本的なSQLコマンドのみを使用する場合、アルバムから最大5つのレコードのみを取得することは非常に困難です。場合によっては、適切なレコードを導き出すことができません。ストアドプロシージャを使用することをお勧めします。:)

于 2013-03-19T06:34:57.377 に答える