還是關於樹的演算法問題。是樹結構就涉及到遞迴的問題。
眾所周知,遞迴是演算法中除圖演算法外最複雜的一種,關鍵是在於思想的理解!
另一方面,遞迴演算法,堆疊呼叫開銷相對來說很大。
最近,發現現在很多專案都涉及到這個,樹型結構資料包表,樹型下拉框,無限級版塊分類等等
在實際開發中也很常見。
下面例子中的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...