select 加入数据库的第一行

select the first row of a joined database

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

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

//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 的第一行。

有多种方法(包括变量)。但是,采用您的方法,您可以使用聚合函数代替 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
               );

在第二个 select 中,您只选择加入 ID,您可以将其替换为

..=dog_images.dog_page_id
这正是您从 select

中得到的

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

而且你应该只得到一张图片的信息