踩坑記錄 MySQL 實現自定義遞迴函式

2022-06-15 07:06:15 字數 1592 閱讀 5340

因專案需要,需根據某個商品類別path,查詢該類別下的所有子類別

表  goods-categories(path,parent_id,id)

該處使用的表為臨時建立的表 t1(id,parent_id,code)

最終成品**:

delimiter //

drop function if exists f1;

create function f1(tableid int)

returns varchar(200)

begin

declare p1 varchar(2000);

declare p2 varchar(200);

declare p3 varchar(200);

declare p4 varchar(200);

set p1 ='';

set p3 ='';

set p4 ='';

set p2 = cast(tableid as char);

while p2 is not null do

set p1 = concat(p1,',',p3);

set p4 = p2;

select group_concat(id) into p2 from t1

where find_in_set(parent_id,p2)>0;

select group_concat(code) into p3 from t1

where find_in_set(parent_id,p4)>0;

end while;

return p1;

end//

【錯誤1】: 函式結尾使用 end;  報錯。

【解決方案】: 使用 delimiter //   定義結束符。因為mysql預設【;】為結束符,但是函式中又避免不了要寫sql,所以會提前遇到【;】導致不正常結束。所以定義// 為結束符,這樣mysql就能執行完整的函式結構體,而不是函式的中途的某個分號就執行了。

【錯誤2】:group_concat 函式使用錯誤,在sql後面增加了 group by id【其實這個地方使用id就是業務上的錯誤了】,導致了一次查詢會有多條記錄,而  select into 引數a  ,返回多條記錄時會報錯;

【錯誤3!!!】引數名 使用id ,  create function f1(id int)

導致出現了奇奇怪怪的問題,耗費了我大部分的時間。

【錯誤4】select group_concat(id) into p2,group_concat(code) into p3 from t1

where find_in_set(parent_id,p2)>0;

不能在 乙個select語句裡面返回給兩個物件,會報語法錯誤

小程式 自定義tabbar狀態失效踩坑記錄

網上還有個解決方案我也試驗了下,就是配置正常的tabbar然後onload時候呼叫wx.hidetabbar,也是通過元件引用,每一頁需要加上自定義元件標籤,切換tab一樣用wx.switchtab來解決,但是效果跟上面一樣,仍然不行。博主後來感覺可能是執行過程有問題,不斷的除錯data中當前頁面以...

mysql踩坑記錄

好記性不如爛筆頭 之前在電腦上裝過mysql,但最近想在學一下發現忘記了登陸密碼,索性解除安裝了mysql重新安裝了。首先檢視mysql的依賴項 dpkg list grep mysql 然後解除安裝 sudo apt get remove mysql common sudo apt get aut...

mysql踩坑記錄

1 今天在linux上面裝完mysql,卻發現在本地登入可以,但是遠端登入卻報錯host is not allowed to connect to this mysql server,找了半天試了網上的一些方法都沒有解決,最終在一篇文章裡找到了解決方法,特意記錄一下。先說說這個錯誤,其實就是我們的m...