SQL将列中的多个值合并为一个单元

问题描述:

已经有大量的sql连接q已经存在,但是我没有看到我的答案,所以在这里。 。 。我正在使用WPDB(Wordpress数据库)/ EZSql/MySQL 5.0。试图实现下面的'简单'期望输出并不容易。SQL将列中的多个值合并为一个单元

电流输出

MemberID   MemberName    FruitName 
-------------- --------------------- -------------- 
1     Al      Apple 
1     Al      Cherry 

希望的输出

MemberID   MemberName   FruitName 
-----------  --------------  ------------ 
1     Al     Apple, Cherry 

MEMBERID来自表中的,成员名称来自表A和表B,并且FruitName来自表B。因为我从表中的输出了很多其他列的,我曾经使用过此查询“左加入”两个表:

 <td><?php echo $content->MemberID ?></td> 
     <td><?php echo $content->MemberName ?></td> 
     <td><?php echo $content->FruitName ?></td> 

我认为:

$contents = $wpdb->get_results($wpdb->prepare("SELECT * FROM a LEFT JOIN b ON a.MemberName = b.MemberName")); 

后来我用echo打印的列我应该尝试以不同的方式查询/连接两个表格,尽管在打印列时可能会有创意。我发现这个discussion here,并且模仿了我的问题,但我不明白他们的解决方案,并希望更简单些。

GROUP BY成员名称和GROUP_CONCAT(FR uitName)。例如,

SELECT MemberId, MemberName, GROUP_CONCAT(FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName; 
+0

嗯,试过这个,并得到一个错误,说MemberName是一个模棱两可的领域,所以我改变了SELECT MemberID,MemberName到SELECT MemberID , 一个。成员名称和我的出放看起来像这样: MEMBERID成员名称GROUP_CONCAT(FruitName) 1的Al [BLOB - 3 B] Adam 2009-07-20 11:46:36

一种方法是循环和建立在PHP输出(或任何语言哟正在使用)。

从数据库获取行或将数据提交给用户时连接水果。 Id建议后者,因为它更像是一个视图逻辑问题。

如果你想用SQL来完成,你必须创建你自己的(我不相信MySQL有内置的,但我可能是错的)聚合函数来连接字符串。它并不那么微不足道。

如果您只读取一个成员,你也可以做到这一点在SQL使用变量,林uncertaing关于确切的MySQL的语法,但对于MSSQL会是这样的:

DECLARE @frutis VARCHAR(MAX) 

SELECT @fruits = ISNULL(@fruits + ', ' + FruitName, FruitName) 
FROM ... 

SELECT @fruits 

鉴于你使用MySQL,我相信GROUP_CONCAT函数会做的正是你要寻找的:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

+0

啊,很高兴看到我错了:-) – Brimstedt 2009-07-20 05:53:34

SELECT MemberID, MemberName, GROUP_CONCAT(FruitName SEPARATOR ',') FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY MemberID, MemberName; 
+0

有与下面完全相同的问题 – Adam 2009-07-20 11:49:47

@Adam 我知道这可能会晚点来回答,但我只是碰到了同样的问题,所以这里是我的解决方案来扩展麦克回答和解决了多个相同的水果OCCURENCES:

SELECT MemberId, MemberName, GROUP_CONCAT(distinct FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName; 

所以基本上你只需要在GROUP_CONCAT函数中添加“distinct”。

我希望有帮助。