典型樹型選單問題解決

2021-05-22 04:44:49 字數 3426 閱讀 6727

問題描述:

實現對商品資訊的分類,分類的同時生成乙個序號。

序號的規則就是取他所屬的類的序號+同一類別的排序號)

scb_subject

classid   classname fatherid  scblevel

1          蔬菜      -1          01

2          茄子       1          0101

3          白菜       1          0102

4          蘿蔔       1          0103

5          布匹      -1          02

6          服裝       5          0201

7          **       6          020101

8          女上衣     7          02010101

9          **       6          020102

如果現在表裡面的scblevel都是空的。

解決方案:

–測試資料

create table t(classid varchar(3),fatherid varchar(3),classname nvarchar(10),scblevel varchar(20))

insert t select 『1′,』-1′ ,』蔬菜』,null

union all select 『2′,』1′  ,』茄子』,null

union all select 『3′,』1′  ,』白菜』,null

union all select 『4′,』1′  ,』蘿蔔』,null

union all select 『5′,』-1′ ,』布匹』,null

union all select 『6′,』5′  ,』服裝』,null

union all select 『7′,』6′  ,』**』,null

union all select 『8′,』7′  ,』女上衣』,null

union all select 『9′,』6′  ,』**』,null

–深度排序顯示處理

–生成每個節點的編碼累計(相同當單編號法的編碼)

declare @t_level table(classid varchar(3),level int,sort varchar(8000))

declare @level int

set @level=0

insert @t_level select classid,@level,』0′+classid

from t

where fatherid = -1

while @@rowcount>0

begin

set @level=@level+1

insert @t_level select a.classid,@level,b.sort+』0′+a.classid

from t a,@t_level b

where a.fatherid=b.classid

and b.level=@level-1

end—先更新原表的scblevel編號

update t

set scblevel=a.sort

from t inner join (

select top 100 percent a.classid,b.sort,a.classname

from t a,@t_level b

where a.classid=b.classid

order by b.sort) a on t.classid=a.classid

—重新排列scblevel編號

update t set

scblevel=』0′+right(–重排第一層編碼

(select count(distinct scblevel) from t where scblevel<=a.scblevel and len(scblevel)=2),2)

+case –重排第二層編碼

when len(scblevel)>2

then right(100+

(select count(distinct scblevel) from t where scblevel<=a.scblevel and scblevel like left(a.scblevel,2)+』__』),2)

else 」 end

+case –重排第三層編碼

when len(scblevel)>4

then right(100+

(select count(distinct scblevel) from t where scblevel<=a.scblevel and scblevel like left(a.scblevel,4)+』__』),2)

else 」 end

+case –重排第四層編碼

when len(scblevel)>6

then right(100+

(select count(distinct scblevel) from t where scblevel<=a.scblevel and scblevel like left(a.scblevel,4)+』__』),2)

else 」 end

+case –重排第五層編碼

when len(scblevel)>8

then right(100+

(select count(distinct scblevel) from t where scblevel<=a.scblevel and scblevel like left(a.scblevel,4)+』__』),2)

else 」 end

from t a

–顯示處理結果

select * from t

drop table t

classid fatherid classname  scblevel

——- ——– ———- ——————–

1       -1       蔬菜         01

2       1        茄子         0101

3       1        白菜         0102

4       1        蘿蔔         0103

5       -1       布匹         02

6       5        服裝         0201

7       6        **         020101

8       7        女上衣       02010101

9       6        **         020102

(9 row(s) affected)

典型樹型選單問題解決

問題描述 實現對商品資訊的分類,分類的同時生成乙個序號。序號的規則就是取他所屬的類的序號 同一類別的排序號 scb subject classid classname fatheridscblevel 1蔬菜 101 2茄子 10101 3白菜 10102 4蘿蔔 10103 5布匹 102 6服裝...

oom問題解決

dalvik虛擬機會為應用程式分配固定大小的heap 如果使用超過了這個heap的大小,且沒有可被 物件,就會報oom。多張較大會迅速占用空間造成oom。我們可以使用一下的方法來減少這種情況的產生 1.減少單張的大小,根據螢幕大小來對bitmap做resize。private void setima...

too many open files問題解決辦法

今天用 往liunx中寫檔案,檔案很多 執行一會就日誌上就報錯 too many open files 結果找了半天才解決這個問題,現在給大家分享一下。首先用 ulimit a 命令看看linux的open files值是多少,結果乙隻有1024,不夠用的。然後修改linux的配置檔案,修改 etc...