2014-01-08 31 views
2

尝试连接两个表并希望从第二个表中获取最新记录。在mysql中使用连接时从右表中选择最新记录

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多个条目画廊表

我想要最新的图像最古老的图像为每个画廊。

+0

请更好地描述你想要的。 image_videos中的每个图库条目是否有多个条目?对于每个图库条目,您需要来自image_videos的最新图像? – niyou

回答

0

首先,您当前的ORDER BY声明按照库ID排序,而不是按image_video ID排序。因此,您可以按照降序获取画廊,但这些画廊中的图像没有定义的顺序。由于它们可能按照创建的顺序进行物理存储,所以这是您接收它们的顺序。我很困惑GROUP BY。这可能不是你想要的:它为每个图库创建一行。它甚至不合法的SQL,但我认为MySQL允许它,并给你随机数据。因此,您可以从每个画廊获取一行随机图片,并从该图库随机获取images_videos。再次,可能是最早的一次,因为这是它的物理存储方式。

丢掉GROUP BY并点击图片视频ID。您在images_videos上确实有某种列,可以让您确定某种顺序,对吧?

+0

刚刚下了GROUP BY,它开始很多结果,我只想要一个。请给出一个实际的例子 –

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) 
+0

它的工作原理,你能为我解释 –

+0

首先我选择所有匹配的images_videos行的所有行。那么我说只选择那些gallery_id匹配的行,并且它是具有最高id的行(MAX(ID)) – niyou

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 
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 .... 
0

的代码本方

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

带回的图像表中的最新行对每个gallery_id(images_videoid是身份,因此最新的会是最大数量)后

你加入的结果是一个表包括(gallery_id,最新images_videoid)上galleryid为每个画廊获取最新形象。