我可以连接多个MySQL行到一个字段?

使用MySQL ,我可以做一些事情:

 SELECT hobbies FROM peoples_hobbies WHERE person_id = 5; 

并得到:

 shopping fishing coding 

但是我只想要1行,1列:

 shopping, fishing, coding 

原因是我从多个表中select了多个值,并且在所有的连接之后,我得到了比我想要的更多的行。

我已经在MySQL Doc中寻找了一个函数,它看起来不像CONCATCONCAT_WS函数接受结果集,所以这里的任何人都知道如何做到这一点?

你可以使用GROUP_CONCAT 。

如:

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

死亡 :正如Dag在他的评论中所述,结果有1024字节限制。 要解决此问题,请在查询之前运行此查询:

 SET group_concat_max_len = 2048 

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

如果您的MySQL版本(4.1)支持,请查看GROUP_CONCAT 。 请参阅文档了解更多详情。

它看起来像这样:

  SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') FROM peoples_hobbies WHERE person_id = 5 GROUP BY 'all'; 

连接多个单独行的替代语法

警告:这个职位会让你饿。

鉴于:

我发现自己想要select多个单独的行,而不是一个组,并连接到某个字段上。

假设您有一张产品ID及其名称和价格表:

 +------------+--------------------+-------+ | 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 | +------------+--------------------+-------+ 

然后你有一些花哨的阿贾克斯,把这些小狗列为checkbox。

你的饥饿的河马用户select13,15,16。 她今天没有甜点

找:

使用纯粹的mysql来汇总用户的订单。

解:

使用GROUP_CONCATIN子句 :

 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 | +------------------------------------------------+ 

奖励解决scheme:

如果你想要总价格,折腾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:道歉,如果你没有一个N-Out在附近…

您可以通过设置group_concat_max_len参数来更改GROUP_CONCAT值的最大长度。

请参阅MySQL文档中的详细信息。

有一个GROUP聚合函数GROUP_CONCAT 。

在我的情况下,我有一排ID,它是必要的,把它转换为字符,否则,结果被编码为二进制格式:

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

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

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

那么你可以得到

 test1,test11 

我有一个更复杂的查询,发现我不得不在外部查询中使用GROUP_CONCAT才能使其工作:

原始查询:

 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; 

希望这可能有助于某人。

尝试这个:

 DECLARE @Hobbies NVARCHAR(200) = ' ' SELECT @Hobbies = @Hobbies + hobbies + ',' FROM peoples_hobbies WHERE person_id = 5;