SQL根据2个表连接获取最后插入的5个项目

时间:2013-10-11 15:39:15

标签: mysql sql

我有2个表,项目/图像相关:

[project]
project_id (int primary key)
completed (date)

[project_media]
project_media_id (int primary key)
project_id (int foreign key)
image (varchar)

我想选择的是:
从基于完成的最后5个项目记录开始,根据project_media_id获取最后添加的图像。

换句话说,从最后5个项目插入的最后一个图像。

到目前为止我所拥有的:

select project.completed, project_media.project_id, project_media.image 
from project 
inner join project_media 
    on project.project_id = project_media.project_id 
order by completed desc limit 5

3 个答案:

答案 0 :(得分:0)

SELECT PR.*, 
(
  SELECT PM.image FROM project_media PM
  WHERE PR.project_id = PM.project_id
  ORDER BY PM.project_media_id DESC
  LIMIT 1
) AS image
FROM 
(
  SELECT P.project_id, P.completed 
  FROM project P
  ORDER BY P.completed DESC
  LIMIT 5
) AS PR

答案 1 :(得分:0)

如果你想在项目表中获得最近的五件事,你可以这样做:

select * from project order by completed desc limit 5;

加入另一张桌子,你最终会得到这样的结果:

select * from project p join project_media pm on p.project_id = pm.project_id order by completed desc limit 5;

限制列,您的查询将是:

select pm.image from project p join project_media pm on p.project_id = pm.project_id order by completed desc limit 5;

我有点不清楚你最后要问的是什么,但听起来你现在只想从这五件事中得到一张基于media_project_id的图像。您可以使用子查询执行此操作:

select a.image from (select pm.image, pm.project_media_id from project p join project_media pm on p.project_id = pm.project_id order by completed desc limit 5) a order by a.project_media_id limit 1;

这会回答你的问题吗?

答案 2 :(得分:0)

SELECT PM2.image
FROM
(
  SELECT
      P.project_id,
      MAX(PM.project_media_id) AS last_project_media
  FROM project_media PM
    JOIN project P ON P.project_id = PM.project_id
  GROUP BY PM.project_id
  ORDER BY PM.completed DESC
  LIMIT 5
) PM1
JOIN project_media PM2
    ON PM1.last_project_media = PM2.project_media_id