[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條資料,哪乙...