mysql - 我可以串联多个MySQL行合并为一个字段?

  显示原文与译文双语对照的内容

使用 MySQL,我可以执行以下操作:


SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

并获取:


shopping
fishing
coding

但我只想要 1行,1列:


shopping, fishing, coding

原因是我从多个表中选择多个值,并且在所有的联接之后,我得到的行数比。

我找了有关 MySQL大夫上的一个函数,并且它看来不喜欢 CONCAT 或者 CONCAT_WS 函数接受结果集,所以这里的所有人都知道如何做到这一点?

时间:

你可以使用 GROUP_CONCAT

如中所示:


SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies GROUP BY person_id

死亡: 就像他在评论中所说的,结果有 1024字节的限制。 要解决这里问题,请在查询之前运行这里查询:


SET group_concat_max_len = 2048

当然,你可以根据需要更改 2048

group_concat 如果你的MySQL版( 4.1 ) 支持it,具有 look. 有关详细信息,请参阅文档

看起来像:


select group_concat(hobbies separator ', ') 
 from peoples_hobbies where person_id = 5 group by 'all';

你可以通过设置 group_concat_max_len 参数修改最大的GROUP_CONCAT 长度值。

查看 documantation编辑器中的详细信息。

使用 MySQL(5.6.13) 会话变量和赋值运算符,如下所示


SELECT @logmsg := CONCAT_ws(',',@logmsg,items) FROM temp_SplitFields a;

然后你可以得到

 
test1,test11

 

在我的例子中,我有一行 Ids,需要将它的转换为 char,否则,结果将被编码为二进制格式:


SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table

连接多个的替代语法

警告:这篇文章会让你挨饿。

给出:

均以某一field,我发现我自己希望进一步 选择多个,各个行的一个 group—and —instead concatenate.

假设你有一个产品标识表及其名称和价格:

+------------+--------------------+-------+ | product_id | name | price | +------------+--------------------+-------+ | 13 | Double Double | 5 | | 14 | Neapolitan Shake | 2 | | 15 | Animal Style Fries | 3 | | 16 | Root Beer | 2 | | 17 | Lame T-Shirt | 15 | +------------+--------------------+-------+

然后你有一些 fancy-schmancy ajax将这些小程序作为复选框列出。

你的hungry-hippo用户选择 13, 15, 16 。 今天没有她的甜点。。

查找:

使用纯MySQL在一行中总结用户顺序的方法。

解决方法:

GROUP_CONCAT一起使用 IN 子句:

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);

输出:

+------------------------------------------------+ | order_summary | +------------------------------------------------+ | Double Double + Animal Style Fries + Root Beer | +------------------------------------------------+

奖金解决方案:

如果你想要总价格,请输入 SUM()

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16); +------------------------------------------------+-------+ | order_summary | total | +------------------------------------------------+-------+ | Double Double + Animal Style Fries + Root Beer | 10 | +------------------------------------------------+-------+

PS: 抱歉,如果你附近没有 In-N-Out

在外部查询中能得到它给work,我实现了一个更加复杂的查询,并发现,我不得不使用

原始查询:


SELECT DISTINCT userID 
FROM event GROUP BY userID 
HAVING count(distinct(cohort))=2);

崩溃:


SELECT GROUP_CONCAT(sub.userID SEPARATOR ', ') 
FROM (SELECT DISTINCT userID FROM event 
GROUP BY userID HAVING count(distinct(cohort))=2) as sub;

希望这对某人有帮助。

...