我可以连接多个MySQL行到一个字段?
使用MySQL
,我可以做一些事情:
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
并得到:
shopping fishing coding
但是我只想要1行,1列:
shopping, fishing, coding
原因是我从多个表中select了多个值,并且在所有的连接之后,我得到了比我想要的更多的行。
我已经在MySQL Doc中寻找了一个函数,它看起来不像CONCAT
或CONCAT_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_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 | +------------------------------------------------+
奖励解决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;