[英]Inner join with 3 tables
我正在使用PHP和PDO,我需要重新选择连接3个表的信息:
该表具有以下结构:
相片:
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.