MySQL:总结两个陈述

时间:2013-12-28 20:59:39

标签: mysql

如果有可能 - 我如何将这两个选项放在一起,所以我只需要向服务器发送一个查询而不是两个(就像我现在正在做的那样)。

由于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

2 个答案:

答案 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将结果合并到一个结果集中。