人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

“中值排序基數(shù)法完成樹狀結(jié)構(gòu)”的補(bǔ)充

“中值排序基數(shù)法完成樹狀結(jié)構(gòu)”的補(bǔ)充

更新時(shí)間:2019-06-23 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

“中值排序基數(shù)法實(shí)現(xiàn)樹狀結(jié)構(gòu)”的補(bǔ)充

由于一時(shí)疏忽,造成了此法“對(duì)于int類型的基數(shù)字段,對(duì)原始貼的回復(fù)只能有31個(gè);numeric類型的基數(shù)字段,對(duì)原始貼的回復(fù)也不能超過(guò)120個(gè)”(實(shí)際上是對(duì)于int型字段,原始貼的回復(fù)第32個(gè)以上的樹狀結(jié)構(gòu)顯示開始紊亂,對(duì)于numeric型的基數(shù)字段,原始貼的回復(fù)從121個(gè)以上樹狀結(jié)構(gòu)顯示開始紊亂——回復(fù)并不會(huì)出問(wèn)題),這是由于計(jì)算機(jī)存儲(chǔ)精度引起的。
我們可以將加貼的存儲(chǔ)過(guò)程修改一下(加進(jìn)前面加上**號(hào)的行)以限制到了一定深度(在特定數(shù)據(jù)類型下,基數(shù)無(wú)法分辨)的時(shí)候不再以樹狀結(jié)構(gòu)顯示(而采用平顯——平行顯示,這樣做雖然有點(diǎn)象折衷的做法,但在實(shí)際上由于瀏覽器等的限制——即使在深度100的時(shí)候能以樹狀結(jié)構(gòu)顯示,但從你的瀏覽器看來(lái)的樹狀結(jié)構(gòu)的結(jié)果仍然不是清晰的——屏幕寬度不夠,會(huì)折行唄)。

加貼存儲(chǔ)過(guò)程:

CREATE PROCEDURE [add] @keyid int,@message varchar(50) OUTPUT———keyid為回復(fù)的貼子id號(hào),如果是新貼則為0,@message為出錯(cuò)信息
AS
IF (@keyid=0)
INSERT INTO forum (rootid,deep,ordernum,……) values(0,0,0,……)
ELSE
BEGIN
 DECLARE @rootid int,@id int,@deep int,@begnum float,@endnum float,@ordernum float
 SELECT @rootid=0,@id=0,@deep=0,@begnum=0,@endnum=0,@ordernum=0
 SELECT @rootid=rootid,@id=id,@begnum=ordernum,@deep=deep from forum where id=@keyid
 IF (@id=0)
 BEGIN
SELECT @message='要回復(fù)的貼子已經(jīng)被刪除!'
return
 END
 ELSE
 BEGIN
IF (@rootid=0) SELECT @rootid=@id——回復(fù)的是根貼,取其id為新加貼的rootid
SELECT @endnum=ordernum where rootid=@rootid and ordernum>@begnum order by ordernum
IF (@endnum=0)
SELECT @ordernum=@begnum+65536 ——回復(fù)的是最后一貼,可以在此限制@ordernum的范圍以防溢出
ELSE
**BEGIN
**IF @endnum-@begnum>1 ——精度仍能分辨。此處的1為精度標(biāo)記,適合于基數(shù)字段為int,如果基數(shù)字段為numeric字段,請(qǐng)酌情選娶(呸呸呸,錯(cuò)別字來(lái)了),目的是使基數(shù)精度過(guò)小時(shí)限制深度增加,避免顯示時(shí)的紊亂
**SELECT @ordernum=(@begnum+@endnum)/2,@deep=@deep+1——關(guān)鍵,取排序基數(shù)中值
**ELSE
**SELECT @ordernum=@begnum ——限制深度不能再增加,此貼與回復(fù)貼平行顯示,如果存在parentid字段,則要取parentid和回復(fù)貼的parentid一樣
**END
**INSERT into forum (rootid,deep,ordernum,……) values(@rootid,@deep,@ordernum,……)
 END
END
Select @message='成功'
return

剪枝存儲(chǔ)過(guò)程改為:

CREATE PROCEDURE [del] @keyid int,@message varchar(50) OUTPUT———keyid為要?jiǎng)h除的貼子id號(hào),如果是新貼則為0,@message為出錯(cuò)信息
AS
DECLARE @rootid int,@id int,@deep int,@begnum float,@endnum float
SELECT @rootid=0,@deep=0,@begnum=0,@endnum=0,@id=0
SELECT @id=id,@begnum=ordernum,@rootid=rootid,@deep=deep from forum where id=@keyid
IF (@id=0)
BEGIN
 SELECT @message='該貼子不存在!"
 return
END
ELSE
BEGIN
 SELECT @endnum=ordernum from forum where rootid=@rootid and deep<=@deep and ordernum>@begnum order by ordernum
 IF (@endnum=0)——要?jiǎng)h除的是最后一個(gè)子枝或是根貼
 DELETE FROM forum where ordernum>=@begnum and (rootid=@rootid or id=@rootid)
 ELSE
** BEGIN
** IF @begnum=@endnum
** DELETE FROM forum where id=@id and (rootid=@rootid or id=@rootid) ——已經(jīng)受精度限制的枝,只刪當(dāng)前貼
** ELSE
** DELETE FROM forum where ordernum>=@begnum and ordernum<@endnum and (rootid=@rootid or id=@rootid)
** END
END


 雖然是限制,但此限制應(yīng)該是必須的,因?yàn)閷?shí)際上的回復(fù)深是不能太大的(就象我在這里灌到八九層的時(shí)候,討飯貓就大叫“打住打住”了,呵呵)

 歡迎訪問(wèn)我的個(gè)人主頁(yè)http://swuse.yeah.net(原來(lái)bigeagle是說(shuō)我這一句話“目的明顯啊”)

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 龙口市| 承德市| 侯马市| 万州区| 太湖县| 肇州县| 东兰县| 简阳市| 广南县| 荣成市| 双辽市| 阿克陶县| 曲阜市| 吴忠市| 恩施市| 呼图壁县| 武平县| 深水埗区| 内丘县| 若羌县| 潢川县| 榆社县| 定日县| 奇台县| 丰原市| 禄丰县| 铜川市| 衡山县| 莱西市| 全南县| 武穴市| 德庆县| 桐乡市| 乡宁县| 洛浦县| 松江区| 云和县| 印江| 延津县| 兴宁市| 深州市|