繁体   English   中英

内部联接有3个表

[英]Inner join with 3 tables

我正在使用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]

我只知道这样的东西可以用INNER JOIN制作,但是我找不到如何用3个表制作它。

有什么例子或其他帮助我可以做到这一点?

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

试试吧

"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”orelse,你需要单独给予

$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
 "

我认为这可以使用存储过程来解决。 使用变量和循环 ,您可以检索所需的记录。 仅使用基本SQL命令时,从专辑中获取最多5条记录非常具有挑战性。 有时,您无法获得正确的记录。 我建议你使用Stored Proc。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM