關於無限級分類的sql語句操作

2021-04-12 21:40:58 字數 2041 閱讀 4975

還是關於樹的演算法問題。是樹結構就涉及到遞迴的問題。

眾所周知,遞迴是演算法中除圖演算法外最複雜的一種,關鍵是在於思想的理解!

另一方面,遞迴演算法,堆疊呼叫開銷相對來說很大。

最近,發現現在很多專案都涉及到這個,樹型結構資料包表,樹型下拉框,無限級版塊分類等等

在實際開發中也很常見。

下面例子中的childs為nvarchar型,儲存改目分類下的所有分類專案,寫了個函式自動生成

這時,如果想知道某版塊下的所有的帖子(包含子版塊)

exec 'select * from t_board where boardid=@bid or boardid in (@childids)'

就可以了

--獲取所有的下級分類,末尾帶,

create

function

[dbo].

[fn_get_childids](

@bid

int)

returns

nvarchar

(100)as

begin

declare

@rnvarchar

(100

)set@r=

''declare

@tmp

intdeclare

cur 

cursor

forselect

boardid 

from

t_board 

where

preid

=@bid

open

curfetch

next

from

cur 

into

@tmp

while

(@@fetch_status

<>-1

)begin

set@r=@r

+cast

(@tmp

asnvarchar(10

)) +',

'set@r=

@r+dbo.fn_get_childids(

@tmp

)fetch

next

from

cur 

into

@tmp

endclose

curdeallocate

curreturn(@r

)/*update t_board set childids=dbo.fn_get_childids(boardid)

update t_board set childids=left(childids,len(childids)-1) where childids <>''

*/end

--獲取所有上級分類,末尾不帶,

create

function

[dbo].

[fn_get_preids](

@bid

int)

returns

nvarchar

(100)as

begin

declare

@rnvarchar

(100

)set@r=

''declare

@pid

intset

@pid

=@bid

while

@pid

>

0begin

select

@pid

=preid 

from

t_board 

where

boardid

=@pid

--print @pidif(

@pid

>0) 

set@r=@r

+cast

(@pid

asnvarchar) +

','end

if@r

<>

''set@r=

left(@r

,len(@r

)-1)

return(@r

)end

無限級分類的實現

在我們做 的時候,不管是新聞系統還是產品系統,或者是部落格,論壇等等,都少不了與分類打交道。有時候我們經常說分幾級分類,一般分2 3級,具體視情況而定,但是這樣的做法非常死板,不夠靈活,因為不是任何類別下的分類都有子類,孫類 為了能夠使分類靈活,我們經常採用的是無限級分類。無限級分類主要思路有兩種 ...

SQL資料操作語句分類

首先sql structured query language 結構化查詢語言。是一種資料庫查詢和設計程式語言,用於訪問資料庫以及查詢 更新和管理關係資料庫系統。同事也是資料庫指令碼檔案的副檔名。然後呢,資料庫語句分為 1 資料定義語句還有 ddl 2 資料操縱語句 dml 3 資料查詢語句 dql...

無限級分類迭代方法的編輯操作方法

無限級分類使用迭代的方法時,在顯示編輯頁面的時候,需要將編輯的分類所對應的本身及其所有子分類從分類列表中清楚,該 的edit動作即完成此工作。同時還加入了css控制的顯示效果。1.2.迭代sql查詢,生成無限級分類樹 3.資料結構 4.create table cat 5.cid int 5 uns...