在開發中經常遇到一些資料需要迭代才能查出,於是查了一下mysql如何實現對資料的的迭代,網上基本都是用函式實現的。但是都只是介紹寫法,和實現效果。我們在實際情況中建立的表肯定是和網上給出不同的,這就讓第一次接觸函式的人一臉懵逼不知道該怎麼弄,往往需要反覆嘗試才能成功。
於是我記錄了一下,我用到的一條迭代函式語句,我會註明幾個修改點。這樣就基本可以根據說明修改完成後直接用了。先讓我們看一下函式語句。
drop function if exists `test`;
delimiter ;;
create definer=`db`@`%` function `test`(testid char(32)) returns varchar(4000) charset utf8
begin
declare stemp varchar(4000);
declare stempchd varchar(4000);
set stemp='$';
set stempchd = cast(testid as char(32));
while stempchd is not null do
set stemp= concat(stemp,',',stempchd);
select group_concat(sort_id) into stempchd from workorder_sort where find_in_set(sort_pid,stempchd)>0 ;
end while;
return stemp;
end;;
delimiter ;
drop function if exists `函式名稱`;
delimiter ;;
create definer=`db`@`%` function `函式名稱`(條件字段 字段型別(字段長度)) returns varchar(4000) charset utf8
begin
declare stemp varchar(4000);
declare stempchd varchar(4000);
set stemp='$';
set stempchd = cast(條件字段 as char(32));
while stempchd is not null do
set stemp= concat(stemp,',',stempchd);
select group_concat(把特定字段整理成乙個字串) into stempchd from 迭代表名 where find_in_set(迭代字段,stempchd)>0 ;
end while;
return stemp;
end;;
delimiter ;
根據上面2個函式sql就可以對比出,我們需要幹以下幾件事:
1. 修改自己需要的函式名
2. 定義傳入的欄位名稱,字段型別以及字段長度
3. 對條件字段進行型別轉換 ,並賦值給stempchd 。(如果型別相同不要這個,直接 stempchd = 條件字段即可)
4. 設定需要整理的id,這個是把查出的迭代id整理成乙個欄位串。(因為我們一般在查詢語句會有很多條件,所以我們這裡只是查出所有id,然後配合sql語句最終實現我們想要的效果。)
5. 修改表名
6. 設定迭代的關聯字段,一般為xxpid 。
7. 執行改完的語句,自動生成函式。
通過上面幾步,我們一般就可以建立乙個符合自己預期的函式。然後我們只需要寫乙個查詢sql語句即可把,父類及下面的子類都查詢出來:
select * from workorder_sort where find_in_set(sort_id,querychildrenareainfo('111'))
關於迭代器失效
迭代器失效 注意關聯容器和序列容器的區別 序列容器 vector list deque 關聯容器 map set 序列性容器 erase迭代器不僅使所有指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase iter 的方式,但是erase的返回值為下乙個有效的迭代器,...
關於迭代的理解
參考自 參考自 參考自 迭代 迭代的使用場景 陣列的資料量很大 迭代是迴圈的一種方式,逐個訪問列表的某一項,能夠迴圈輸出陣列中所有的元素 迭代只能對應集合,列表,陣列等。不能對執行 進行迭代.迭代是重複的活動,其目的通常是為了逼近結果。每一次對過程的重複稱為一次 迭代 而每一次迭代得到的結果會作為下...
關於開方的迭代演算法
去年某司有一道面試題是不用 開根號計算開方,當時第一反應就是迭代逼近,但是對方還要求能不能把速度加快,先稍作總結。迭代逼近意思就是 我先隨便取乙個數,如果平方大於給定 n,那麼就取乙個小一點的 如果小了,那就取個大一點,最後達到精度要求即可。實現 class solution else x x 快速...