如果有可能 - 我如何将这两个选项放在一起,所以我只需要向服务器发送一个查询而不是两个(就像我现在正在做的那样)。
由于where部分确切地定义了一个结果而所有其他字段都按字符串分组,因此结果只有一行。
分组的字符串将在php中作为数组处理。所以我得到的结果是精确的一个图像(id和名称)和五个数组(前四个数组属于一起,因为它们一起定义了图像中的斑点;第五个数组具有子图像的名称)
SELECT
main.id,
main.name,
group_concat(details.id),
group_concat(details.top),
group_concat(details.left),
group_concat(details.description)
FROM images_main main
LEFT JOIN images_details details ON main.name = details.name
WHERE main.name = 'specific_name'
GROUP BY main.name
SELECT
main.id,
main.name,
group_concat(child.name)
FROM images_main main
LEFT JOIN images_main child ON main.id = child.parent_id
WHERE main.name = 'specific_name'
GROUP BY main.name
答案 0 :(得分:1)
在子查询中进行聚合,然后使用left outer join
将它们组合在一起。从main
表开始,以确保不会丢失任何行,以防其中一个子查询返回任何行:
select id.*, child.childs
from images_main main left outer join
(SELECT details.name, group_concat(details.id) as ids, group_concat(details.top) as tops,
group_concat(details.left) as lefts, group_concat(details.description) as descriptions
FROM images_details details
WHERE details.name = 'specific_name'
GROUP BY details.name
) id
on main.name = id.name left outer join
(SELECT main.id, group_concat(child.name) as childs
FROM images_main main join
images_main child
ON main.id = child.parent_id
WHERE main.name = 'specific_name'
GROUP BY main.name
) child
on main.id = child.id
WHERE main.name = 'specific_name' ;
答案 1 :(得分:0)
您可以使用Union将结果合并到一个结果集中。