【问题标题】:select the first row of a joined database选择连接数据库的第一行
【发布时间】:2015-11-11 12:47:32
【问题描述】:

我需要选择与另一个主数据库连接的数据库的第一行。 主数据库收集有关狗的信息,它们的种族、大小、姓名…… 加入的数据库链接到第一个并提供狗的图像。 每只狗都有不同的图像,不止一个。 在狗的列表页面中,我需要为每只狗显示所有狗的详细信息,并且只显示加入数据库的第一个图像,因为它是个人资料图像。

所以这里是两个数据库的结构:

//dog_pages database:

id
--
slug
--
name
--
race
--
size
--
description
--
created
--
updated

和:

//dog_images database:

id
--
dog_page_id  //this is for the join
--
content
--
img_title
--
img_url
--
img_ftp_path
--
thumb_ftp_path
--
thumb_delete_path

我使用此代码生成查询:

SELECT dog_pages.id, dog_pages.slug, dog_pages.name, dog_pages.race, dog_pages.size, dog_pages.description, dog_pages.created, dog_pages.updated, dog_images.id, dog_images.dog_page_id, dog_images.img_url, dog_images.thumb_ftp_path, dog_images.content AS image_content

FROM dog_pages

LEFT JOIN dog_images

ON dog_pages.id = (
    SELECT dog_images.dog_page_id
    FROM dog_images
    WHERE dog_pages.id = dog_images.dog_page_id
    LIMIT 1
)

不幸的是,这不起作用,结果是每只狗都有多个图像。我只需要一张,在 dog_images 的第一行。

【问题讨论】:

    标签: mysql database join row


    【解决方案1】:

    有多种方法(包括变量)。但是,采用您的方法,您可以使用聚合函数而不是limit

    SELECT p.id, p.slug, p.name, p.race, p.size, p.description, dog_pages.created, p.updated,
           i.id, i.dog_page_id, i.img_url, i.thumb_ftp_path, dog_images.content AS image_content
    FROM dog_pages p LEFT JOIN
         dog_images i
         ON p.id = i.dog_page_id AND
            i.id = (SELECT MIN(i2.id)
                    FROM dog_images i2
                    WHERE p.id = i2.dog_page_id
                   );
    

    【讨论】:

    • 天哪!我需要研究这段代码,这对我来说真的很新鲜!非常感谢!
    【解决方案2】:

    在第二个选择中,您仅选择要加入的 ID,您可以将其替换为

    ..=dog_images.dog_page_id
    这正是你从选择中得到的

    要解决问题,请尝试使用 group by dog_pages_I'd

    你应该只获得一张图片的信息

    【讨论】:

    • Gordon 的解决方案对我来说似乎效果很好,但感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多