【问题标题】:Select latest record from right table when using join in mysql在mysql中使用join时从右表中选择最新记录
【发布时间】:2014-01-08 07:51:41
【问题描述】:

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

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 中有多个用于图库表的条目

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

【问题讨论】:

  • 请更好地描述您想要什么。每个画廊条目的 image_videos 中是否有多个条目?对于每个画廊条目,您想要来自 image_videos 的最新图像?

标签: mysql sql select group-by max


【解决方案1】:

暗示您的 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) 

【讨论】:

  • 首先我选择所有匹配 images_videos 行的所有行。然后我说只选择那些与 gallery_id 匹配的行,并且它是具有最高 id (MAX(ID)) 的行
【解决方案2】:

您可以使用自定义连接来获得:

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

【讨论】:

    【解决方案3】:

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

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

    删除 GROUP BY 并按 images_videos ID 订购。您确实在 images_videos 上有某种列,可以让您确定某种顺序,对吧?

    【讨论】:

    • 刚刚删除了 GROUP BY,它开始了很多结果,我只想要一个。请举个实际例子
    【解决方案4】:

    试试这个:

    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
    

    【讨论】:

      【解决方案5】:

      这段代码

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

      为每个 gallery_id 带回 images 表中的最新行(images_videoid 是标识,因此最新的将是最大数量)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        相关资源
        最近更新 更多