我需要选择与另一个主数据库连接的数据库的第一行。 主要数据库收集关于狗的信息,他们的种族,大小,名称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的第一行。
答案 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
组您应该只获得有关一张图片的信息