查询与记录键集引用的每个记录关联的N条记录

时间:2008-11-24 14:01:21

标签: sql mysql

以下是我的方案的简化版本:

  • 我有一个名为 Project 的表格,我通过'id'字段引用。
  • 我有一个名为 Photo 的表,其中有一个名为'project_id'的字段,我将其用于将多张照片与一个项目相关联。 Photo表还有一个自动递增的'id'字段,我用它来订购,等等。

以下是我想要完成的内容:对于项目ID值的集合,我希望检索添加到每个项目的最后5张照片 - 理想情况下,在单个查询中。 : - )

换句话说,我最好不要强加一个查询限制,而是要根据返回的照片数量指定每个项目的限制。

我目前正在将这个实现为每个项目的一个查询,因此N个项目= N个查询(一个好的缓存策略肯定会减少伤害,但这会在以后发生)。

任何人都有解决方案吗?

感谢。

3 个答案:

答案 0 :(得分:1)

对于MySQL中的“最后n项”问题,请看这里:How to select maximum 3 items per users in MySQL?(在最佳答案中就是这样)。

当你从那里拿走它时,你所缺少的只是与你的Projects表格的联接,这应该很容易。

答案 1 :(得分:0)

SELECT project.*, photo.* 
  FROM photo 
  LEFT JOIN project USING project_id 
WHERE photo.project_id = '{$id}' 
ORDER BY photo_id DESC 
LIMIT project.project_photos_limit

试试吗? (显然你的字段名称)

答案 2 :(得分:0)

philistyne解决方案略有改变:

SELECT project.*, photo.* 
  FROM photo 
  LEFT JOIN project USING(project_id)
WHERE photo.project_id IN (comma separated list of project ids)
ORDER BY photo_id DESC 
LIMIT project.project_photos_limit

虽然我不确定LIMIT是否允许您使用字段来执行此操作。