4

已经有大量的 SQLJOIN问题,但我没有看到我的答案,所以就在这里。

我正在使用辅助类wpdbezsql处理 MySQL 5.0 和 Wordpress 数据库。事实证明,试图实现下面的“简单”期望输出并不容易。

电流输出:

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

期望的输出:

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

MemberID来自 表a,MemberName来自 表ab,FruitName来自 表b. 因为我从表中输出了很多其他列a,所以我通过这个查询“左连接”了这两个表:

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

我稍后使用 echo 打印列:

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

我假设我应该尝试以不同的方式查询/加入这两个表,尽管在打印列时可能会获得创造性。我在这里找到了这个讨论,并在它之后模拟了我的问题,但我不理解他们的解决方案,并希望有更简单的东西。

4

5 回答 5

5

GROUP BY MemberName 和 GROUP_CONCAT(FruitName)。例如,

SELECT MemberId, MemberName, GROUP_CONCAT(FruitName) FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY a.MemberName;
于 2009-07-20T05:34:59.480 回答
3

鉴于您使用的是 MySQL,我相信其中一个GROUP_CONCAT函数(可用的聚合函数之一)将完全符合您的要求。

于 2009-07-20T05:33:53.413 回答
1
SELECT MemberID, MemberName, GROUP_CONCAT(FruitName SEPARATOR ',') FROM a LEFT JOIN b ON a.MemberName = b.MemberName GROUP BY MemberID, MemberName;
于 2009-07-20T05:34:29.387 回答
0

@Adam 我知道回答可能会晚,但我遇到了同样的问题,所以这是我扩展 Mike 答案并解决多个相同水果出现的解决方案:

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

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

我希望这会有所帮助。

于 2014-02-13T11:38:59.260 回答
0

一种方法是在 PHP(或您使用的任何语言)中循环和构建输出。

在从 db 获取行或将其呈现给用户时连接水果。我建议后者,因为它更多的是视图逻辑问题。

如果您想在 SQL 中执行此操作,您要么必须创建自己的(我不相信 MySQL 内置了它,但我可能错了)聚合函数来连接字符串。这不是那么微不足道。

如果您只获取一个成员,您也可以通过使用变量在 SQL 中执行此操作,我不确定确切的 MySQL 语法,但对于 MSSQL,它将类似于:

DECLARE @frutis VARCHAR(MAX)

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

SELECT @fruits
于 2009-07-20T05:33:11.417 回答