MySQL中使用group_concat()函數的實例詳解

零下一度
發布: 2017-07-03 09:30:48
原創
1209 人瀏覽過

最近在工作上遇到一個問題:

我們系統的一些邏輯處理是用預存程序實現的,但是有一天客服回饋說訂單下單失敗,查了下單牽扯到的產品基礎資源,沒有問題。

下單的預存程序中有這樣兩句程式碼:

1   declare _err int default 0;2   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;3   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _err=2;
登入後複製

#執行預存程序後變數_err會回傳1,只能偵錯預存程序找問題了。偵錯到下面這段的時候,發現執行完這句sql,_err就變成1了

1 select group_concat(concat(@room_name,',',run_date,',',total_count) separator '|') into @order_desc from tmp_order_detail order by run_date;
登入後複製

由於臨時表tmp_order_detail 中的資料比較多,所以猜測是不是group_concat的問題,所以我把臨時表中的資料減少了一半,發現成功了,所以猜測group_concat是不是有長度限制,google一下,果然。

關於group_concat函數:

#group_concat:預設可連接的長度是1024;如果已經設定了最大長度,超過這個長度就會被截取至這個長度;

在查詢(select)語句中,使用了group_concat之後,limit就會失效;

解決方法:

########################################################## ##########1###、######修改MySQL的設定檔:############
#需要设置的长度
group_concat_max_len = 5120
登入後複製
###### #### ##2、也可以使用sql語句設定:######
SET GLOBAL group_concat_max_len=5120;SET SESSION group_concat_max_len=5120;
登入後複製
######我在預存過程中採用了上面的第二種辦法,執行預存程序,OK,成功! ###### ######下班(今天是星期日)! ! ! ###### ###

以上是MySQL中使用group_concat()函數的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板