查询返回多维分组数组

时间:2010-11-01 22:02:48

标签: mysql group-concat

在假设的场景中,我有一对数据库表,处于一对多的关系中。我试图找到一个很好的查询函数,以便我可以返回表A中的每一行,其中包含一个嵌套数组,用于表B中的所有链接行。

SELECT a.id AS id,a.name as name,b.id AS b_id,b.name AS b_name FROM a,b WHERE a.id=b.eid;

只返回一个结果

SELECT 
    a.id AS id,
    a.name as name,
    GROUP_CONCAT(b.id) AS b_id,
    GROUP_CONCAT(b.name) AS b_name 
FROM a,b 
WHERE a.id = b.eid;

虽然这会返回我想要的但我在数组之后不是字符串(b.name中可能有逗号)

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您可以使用与逗号不同的分隔符:

GROUP_CONCAT(b.name SEPARATOR ';') AS b_name

答案 1 :(得分:1)

除了MySQL数据类型之外,不可能返回任何其他内容,因此简短的答案是,您无法返回子查询的结果数组(嵌套或其他)。您还会看到一些非常激烈的性能命中,试图从外部构建字符串连接值,子字符串顺序将是隐含的,正如您所提到的,您将在选择合适的分隔符时遇到问题。

使用简单的JOIN创建单个结果集几乎肯定会更有效率。关系的“一”侧的任何重复都应该以编程方式处理(在任何意义上,最好是处理多个连接字段上的字符串拆分)。