我设置了两个表。第一个表包含公寓列表,第二个表包含照片列表,每张照片包含对公寓列表 ID 的引用。
我想做的是拉下所有公寓列表并将与每个列表关联的前两张照片组合成一行。
为简单起见,假设 apartment
表中的行是:
post_id,<br>
title,<br>
description
photos
表中的行是:
photo_id,<br>
post_id,<br>
path
执行 SELECT * FROM apartments
时我想要的结果是:
post_id, <br>title,<br> description,<br> path1,<br> path2
path1
和 path2
是照片表中的第一张照片和第二张照片,其 post_id
引用了 post_id
正在检索的当前行。
我已经尝试了所有类型的连接,但似乎无法找到适合我正在尝试做的事情的连接。任何人都知道我如何完成这项工作?
谢谢!!
最佳答案
您可以在照片表上进行 2 个子查询,以选择第一张照片和与刚刚选择的第一张照片不同的第一张照片。
<罢工> 像这样的东西:
SELECT
a.*,
(SELECT path FROM photo p1 WHERE p1.post_id = a.post_id LIMIT 0, 1) AS path1,
(SELECT path FROM photo p2 WHERE p2.post_id = a.post_id AND p2.path != a.path1 LIMIT 0, 1) AS path2
FROM apartment a
我这里没有 mysql 来测试它,所以查询可能需要一些调整,但它给出了总体思路。
罢工>
编辑:同样的想法,替代方法(使用限制来获取第二条记录):
SELECT
a.*,
(SELECT path FROM photo p1 WHERE p1.post_id = a.post_id ORDER BY p1.path LIMIT 0, 1) AS path1,
(SELECT path FROM photo p2 WHERE p2.post_id = a.post_id ORDER BY p2.path LIMIT 1, 1) AS path2
FROM apartment a
关于mysql - 如何运行 SELECT 并将多个列合并为主行中的附加列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657734/