在使用mysql數據庫做一些業務時,比如將一條記錄對應的多條詳情數據記錄歸並為該條記錄的某一個字段時,可以使用mysql的concat_ws和group_concat方法來進行處理:
使用concat_ws方法將詳情數據的一條記錄的多個字段先拼接合並為一個字段,然后使用group_concat將多條詳情數據合並處理的字段拼接合並為一個字段。
語法:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
在 MySQL 中,通過使用 DISTINCT 可以排除重復值,通過使用 ORDER BY 子句對結果中的值進行排序。
SEPARATOR 是一個字符串值,它被用於插入到結果值中。缺省為一個逗號 (","),可以通過指定 SEPARATOR "" 完全地移除這個分隔符。
可以通過變量 group_concat_max_len 設置一個最大的長度。在運行時執行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大長度被設置,結果值被剪切到這個最大長度。如果分組的字符過長,可以對系統參數進行設置:SET @@global.group_concat_max_len=40000
示例如下:
SELECT GROUP_CONCAT(tmp.fileInfo) AS fileInfos FROM ( SELECT CONCAT_WS( '-', file_name, file_url ) AS fileInfo FROM clientlogdetail WHERE serial_no = 11 ) tmp;
以上sql是使用CONCAT_WS方法將clientlogdetail表中的file_name和file_url字段通過分割符-拼接合並為一個字段,之后使用GROUP_CONCAT方法將前面拼接的結果繼續拼接合並為一個字段。效果如下:
詳情記錄字段值:
詳情記錄字段合並結果:
所有詳情記錄結果合並結果:
group_concat還可以設置拼接前綴和后綴符,如group_concat("", 字段名,"'")是以單引號將結果組合進行拼接。