在mysql中使用join时,从右表中选择最新记录

时间:2014-01-08 07:51:41

标签: mysql sql select group-by max

尝试加入两个表并希望从第二个表中获取最新记录。

SELECT * 
FROM gallery 
    LEFT JOIN images_videos ON gallery.ID=images_videos.gallery_id 
WHERE gallery.user_id ="+another_userid+" 
GROUP BY gallery.ID 
ORDER BY gallery.ID DESC

通过这个查询,我从images_videos获得了最古老的图像 但 我想从images_videos表中选择最新的图像 请帮忙 我在images_videos for gallery table

中有多个条目

我想要每个画廊的最新图片。

5 个答案:

答案 0 :(得分:2)

暗示你的images_videos表有一个ID字段

SELECT * 
FROM   gallery g1 
       LEFT JOIN images_videos iv1 
              ON g1.id = iv1.gallery_id 
WHERE  gallery.user_id = "+another_userid+" 
       AND iv1.id = (SELECT Max(id) 
                     FROM   images_videos iv2 
                     WHERE  iv1.gallery_id = iv2.gallery_id) 

答案 1 :(得分:1)

您可以使用自定义联接来获取:

SELECT * 
FROM gallery 
INNER JOIN
(
    SELECT gallery_id,MAX(images_videoid) AS images_videoid 
    FROM images_video GROUP BY gallery_id 
) LATEST

ON gallery.ID=LATEST.gallery_id 
WHERE .... 
ORDER ....

答案 2 :(得分:0)

首先,您当前的ORDER BY语句按图库ID排序,而不是按image_video ID排序。因此,您将按降序获取图库,但这些图库中的图像将没有已定义的顺序。由于它们可能是按照创建的顺序进行物理存储的,因此这就是您接收它们的顺序。

我对GROUP BY感到困惑。这可能不是你想要的东西:它为每个画廊创建一行。它甚至不是合法的SQL,但我认为mysql允许它并为您提供随机数据。因此,您可以在每个图库中获得一行,其中包含来自该图库的随机images_videos。同样,可能是最早的一个因为它是如何物理存储的。

删除GROUP BY并按images_videos ID排序。你在images_videos上有一些专栏可以让你确定某种顺序,对吗?

答案 3 :(得分:0)

试试这个:

SELECT * 
FROM gallery g 
LEFT JOIN (SELECT * 
           FROM images_videos iv 
           INNER JOIN (SELECT iv.gallery_id, MAX(imageVideoId) imageVideoId 
                       FROM images_videos iv GROUP BY iv.gallery_id
                      ) A ON iv.gallery_id = A.gallery_id AND iv.imageVideoId = A.imageVideoId
          ) iv ON g.ID=iv.gallery_id 
WHERE g.user_id ="+another_userid+" 
GROUP BY g.ID 
ORDER BY g.ID DESC

答案 4 :(得分:0)

代码的这一面

 SELECT gallery_id,MAX(images_videoid) AS images_videoid 
FROM images_video GROUP BY gallery_id 

为图库表中的每个gallery_id带回最新一行(images_videoid是标识,所以最新版本将是最大数字)

之后,您在galleryid上加入结果,即包含(gallery_id,最新images_videoid)的表格,以获取每个图库的最新图像。