mysql查詢結果拼接group_concat
轉載請标明出處^_^
原文首發于: https://www.zhangruibin.com
本文出自于: RebornChang的部落格
作為資料庫操作人員,經常會遇到業務上的人說,你幫我整個資料報表,比如說某個月的訂單差額為X單,這X單的訂單号分别為xxx,xxxxx,xxxxxxx,這時候我們就可以用mysql自帶的函數group_concat來實作,先來看下效果
如上圖所示,圖中所顯示的就是一條sql在資料庫執行之後的查詢效果:差異的訂單數是3,後面會有差異的訂單号的拼接字元串,這樣可以直接看到訂單号是哪些,這時候就用到了group_concat。
舉例:
select a.provider,group_concat(a.orderId) ids,group_concat(a.remark separator '|') remarks from order_tab a where a.dingdanhao is null;
在上面那條sql裡面,有兩個group_concat,第一個group_concat(a.orderId),是将查詢出來的結果集的orderId給拼接起來,預設的是使用逗号進行拼接;group_concat(a.remark separator ‘|’)是使用 | 進行拼接。
那這時候就會有一個問題,查詢group_concat相關資料會發現,group_concat預設拼接字元串長度是有限制的,預設長度為1024位元組,那我遇到拼接出來的結果超過1024位元組的話,預設是1024位元組之後的是不顯示的,這時候就需要我們修改系統設定,修改的方法大緻分為以下兩種:
-
直接在mysql控制台設定,此方法不用重新開機資料庫,但是當資料庫重新開機之後設定會失效
先檢視資料庫的group_concat長度
SELECT @@global.group_concat_max_len; show variables like "group_concat_max_len";
然後可以直接修改, 使用以下語句設定,設定為1024000,不夠的話再加:
SET GLOBAL group_concat_max_len=1024000;
SET SESSION group_concat_max_len=1024000;
- 修改mysql的配置檔案,然後重新開機資料庫生效:
在my.ini裡面增加配置項:
#[mysqld]
group_concat_max_len=1024000
然後重新開機mysql服務,即可生效。