MYSQL級聯查詢,包括向上向下的級聯

2021-09-02 15:45:33 字數 1960 閱讀 7877

[url]

-- 名稱:mysql遞迴查詢儲存過程(2014-04-05) 

-- 入:@table 表名[varchar(200)]

-- 入:@field 要查詢返回的欄位名(例如: name,age,remark)[text]

-- 入:@order 返回結果的排序(例如 name desc,age asc)[text]

-- 入:@idname 主鍵列名[varchar(200)]

-- 入:@pidname父鍵列名[varchar(200)]

-- 入:@id 主鍵值[varchar(200)],不能為null,如果值是null,說明要查詢全部,請自己查詢

-- 入:@updown 向上級聯還是向下級聯,1=上 0=下[int]

-- 入:@self 是否包含自己 1=是 0=否[int]

-- 返回查詢結果集

drop procedure if exists query_dg;

create procedure query_dg

(in table_ varchar(200),

in field_ text,

in order_ text,

in idname_ varchar(200),

in pidname_ varchar(200),

in id_ varchar(200),

in updown_ int,

in self_ int

)begin

declare _sqlstr varchar(4000); -- 動態sql

declare _idparam varchar(4000); -- id存放的變數

declare _idset varchar(4000); -- 結果

set @_idset = '';

-- 查詢id開始

if(self_ = 1)then -- 包含自己

set @_idset = id_;

end if;

-- 遞迴開始

if(updown_ = 1)then -- 向上遞迴

set @_sql = concat('select ',pidname_,' into @_idparam from ',table_,' where ',idname_,' = ?');

else -- 向下遞迴

set @_sql = concat('select group_concat(',idname_,') into @_idparam from ',table_,' where find_in_set(',pidname_,', ?) > 0');

end if;

set @_idparam = id_; -- 輸入引數使用時不能 @

prepare _sqlstr from @_sql;

execute _sqlstr using @_idparam;

while @_idparam is not null do

set @_idset = concat(@_idset,',',@_idparam);

execute _sqlstr using @_idparam;

end while;

-- 查詢id結束

set @_sql = concat('select ',field_,' from ',table_,' where find_in_set(',idname_,', ? ) > 0 order by ',order_); -- 查詢

deallocate prepare _sqlstr; -- 解除預編譯

prepare _sqlstr from @_sql; -- 重新預編譯

execute _sqlstr using @_idset;

deallocate prepare _sqlstr;

end

mysql級聯查詢

實現效果 例如 中國 下的 省 市 縣 鄉 輸入 省的id 能把該省下的市,縣,鄉全部查出來,輸入該市的id 可以把 該市下的 縣,鄉全部查出來 oracle 級聯查詢 oracle有內建函式 start with connect by prior 直接實現級聯效果如 select a.from t...

mysql不支援級聯查詢 mysql級聯查詢

實現效果 例如 中國 下的 省 市 縣 鄉 輸入 省的id 能把該省下的市,縣,鄉全部查出來,輸入該市的id 可以把 該市下的 縣,鄉全部查出來 oracle 級聯查詢 oracle有內建函式 start with connect by prior 直接實現級聯效果如 select a.from t...

mysql 級聯優化 MySQL級聯查詢的優化

一 php的foreach和mysql的in哪個執行效率高?1 foreach item as k v 迴圈100次 這裡使用單id查詢一條資料。2 使用in查詢id in 1,2,3,100 100個id條件。同樣的結果,1個查詢100次,1次查詢1條資料 乙個查詢1次,1次查詢100條資料,哪乙...