幹活的時候 遇到要用sql語句做樹查詢(mysql和sqlserver) 這些思路都是我看其他兄弟姐妹的....能用但可能寫得不怎麼好 函式返回的都是以逗號分隔開的id字串
mysql:
查詢當前節點和他的祖先節點
create definer=`root`@`%` function `org_getparents`(childid varchar(32)) returns varchar(10000) begin -- 獲取機構父節點,包括本身 declare stemp varchar(10000); declare stempparentid varchar(10000); set stemp =childid; set stempparentid=childid; while stempparentid!='0' do select parent_id into stempparentid from org where org_id=stempparentid; if stempparentid is not null then set stemp = concat(stemp,',',stempparentid); end if; end while; return stemp; end
查詢當前節點和他的子孫節點create definer=`root`@`%` function `org_getchilds`(rootid varchar(32)) returns varchar(10000) begin -- 獲取機構所有子節點,包括本身 declare stemp varchar(10000); declare stempchd varchar(10000); set stemp = rootid; set stempchd = rootid; while stempchd is not null do select group_concat(org_id) into stempchd from org where find_in_set(parent_id,stempchd) > 0; if stempchd is not null then set stemp = concat(stemp,',',stempchd); end if; end while; return stemp; end
可以這樣使用: select * from org where find_in_set(org_id,org_getchilds('1'));select * from org where find_in_set(org_id,org_getparents('1'));
sqlserver:
查詢當前節點和他的祖先節點: create function [dbo].[org_getparents] ( -- add the parameters for the function here @rootid varchar(50) ) returns varchar(8000) as begin -- declare the return variable here declare @temp varchar(8000) declare @tempid varchar(8000) -- add the t-sql statements to compute the return value here set @tempid=@rootid; set @temp=@rootid; while @tempid!='0' begin select @tempid=parent_id from org where org_id= @tempid; if @tempid!='0' set @temp =@temp+','+@tempid; end -- return the result of the function return @temp end
查詢當前節點和他的子孫節點 create function [dbo].[org_getchilds] ( -- add the parameters for the function here @rootid varchar(50) ) returns varchar(8000) as begin -- declare the return variable here declare @temp varchar(8000) -- add the t-sql statements to compute the return value here select @temp=org_id from org where org_id=@rootid while @@rowcount>0 select @temp=@temp+','+org_id from org where charindex(org_id,@temp)=0 and charindex(parent_id,@temp)>0 -- return the result of the function return @temp end 可以這樣用:select * from org where charindex(org_id,dbo.org_getchilds('1'))>0
select * from org where charindex(org_id,dbo.group_getparents('1'))>0用mysql實現oracle sequence功能
由於mysq只有遞增列的概念沒有oracle的sequence功能,這樣對於以前習慣用oracle資料庫開發的程式設計師不太實用,尤其在要使用nextval在獲取增長序列的時候。這樣就設計乙個能模擬oracle sequence的功能。思路 我們可以用一張表來記錄sequence資料,其實在使用or...
函式實現 MySQL排名函式實現
現在有個需求對所有學生分數進行排名,並且列出名次。剛看到這個需求,我有點懵逼,完全沒有思路?為什麼難一點需求,我就不會做呢?去網上查詢資料,把所有實現都列出來,全部都要學會。建立乙個分數表s score create table s score id int not null auto increm...
淺用mysql比較函式
今天在運算元據庫時,遇到乙個問題 修改表中某條資料,比較某個字段原有值和修改值,如果原有值大於修改值,則這個欄位不修改,從而引出了是用mysql的比較函式 舉個例子,我現在有乙個users表,其中字段分別為id,name,age,id是key。表中原有資料如下 id name age 16 yang...