2

我试图从三个表(照片、相册、相册_照片)中获取数据,然后程序在相册表中搜索用户的相册,然后在相册_照片中查找每个相册的照片 ID,然后,对于每个 ID,按 ID 查看照片表中的所有数据。

昨天我问了这样的问题:Inner join with 3 tables,但现在,我认为问题不同了,我想知道如何为请求添加限制 by inner join

所以,我现在正在使用这段代码:

SELECT a.album_name, a.album_id, c.* 
FROM albums a
INNER JOIN album_photos b ON a.album_id = b.album_id
INNER JOIN photos c ON b.photo_id = c.photo_id
WHERE (
  SELECT COUNT(*) 
  FROM album_photos d
  WHERE b.album_id = d.album_id
  AND d.nick =  :nick
) <=5

好的,此代码选择包含 5 张或更少照片的相册。我不希望代码那样做,无论相册有多少张照片,我都想用 LIMIT OF 5 张照片显示相册。

其他人告诉我你做不到,我相信不是这样,因为SQL语言非常复杂,我认为我们应该有工具来做。

有没有办法以适当的方式做到这一点?

*在我上面分享的链接中,我举了一个关于输出数据的例子。

4

2 回答 2

2

尝试将where子句更改为:

WHERE (
  SELECT COUNT(*) 
  FROM album_photos d
  WHERE d.album_id = b.album_id and
        d.photo_id <= b.photo_id
  AND d.nick =  :nick
) <= 5

这会按顺序计算照片的数量,而不仅仅是相册中的照片数量。

于 2013-03-19T21:26:53.320 回答
0

由于album_photos 有photo 和albums 之间的映射关系,你可以使用TOP 指定加入的照片数量:

SELECT a.album_name, a.album_id, p.* 
FROM albums a
INNER JOIN album_photos ap ON 
   ap.photo_id = (select top 5 photo_id from album_photos where a.album_id = ap.album_id order by photo_id)
INNER JOIN photos p ON ap.photo_id = p.photo_id

子查询中的 Order by photo_id 将确保返回相同的 5 张(或更少)照片

编辑每条评论。修改为使用 MySql LIMIT 而不是 T-SQL TOP

SELECT a.album_name, a.album_id, p.* 
FROM albums a
INNER JOIN album_photos ap ON 
   ap.photo_id = (select photo_id from album_photos where a.album_id = ap.album_id order by photo_id LIMIT 0, 5)
INNER JOIN photos p ON ap.photo_id = p.photo_id
于 2013-03-19T21:46:44.983 回答