我可以连接多个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;