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;
一种方法是循环和建立在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
啊,很高兴看到我错了:-) – 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;
有与下面完全相同的问题 – 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”。
我希望有帮助。
嗯,试过这个,并得到一个错误,说MemberName是一个模棱两可的领域,所以我改变了SELECT MemberID,MemberName到SELECT MemberID , 一个。成员名称和我的出放看起来像这样: MEMBERID成员名称GROUP_CONCAT(FruitName) 1的Al [BLOB - 3 B] Adam 2009-07-20 11:46:36