选择已加入数据库的第一行

时间:2015-11-11 12:47:32

标签: mysql database join row

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

在第二个选择中,您只选择加入的ID,您可以只用

替换它

.. = dog_images.dog_page_id
这正是你从选择

得到的

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

您应该只获得有关一张图片的信息