感覺(jué)做一個(gè)論壇不像想象中的那么容易,但也不像想象中的那么復(fù)雜:),經(jīng)過(guò)4天的浴血奮戰(zhàn),終于從對(duì)論壇制作一無(wú)所知到今天的論壇數(shù)據(jù)結(jié)構(gòu)和組織形勢(shì)初步確定,中間參考了sunamd,bigeagled,廖家遠(yuǎn)等的思路,并得到了賴皮王子,hooke,bigeagle大蝦的熱心幫助,謹(jǐn)以此文一并表示感謝。 bigeagle的文章采用了sql數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn),但現(xiàn)實(shí)中支持asp的免費(fèi)站點(diǎn)本來(lái)就少,支持?jǐn)?shù)據(jù)庫(kù)的免費(fèi)站點(diǎn)更少,支持sql數(shù)據(jù)庫(kù)的免費(fèi)站點(diǎn)。。。反正我沒(méi)見(jiàn)過(guò),哪位知道告訴我一聲:),所以我等窮人只有用access了,我就是采用asp+access的形式實(shí)現(xiàn)了類似chinaasp的論壇。。閑話少說(shuō),言歸正傳。 先說(shuō)一下數(shù)據(jù)庫(kù)的結(jié)構(gòu),主要有兩個(gè)表,一個(gè)存儲(chǔ)用戶信息user,一個(gè)存儲(chǔ)論壇文章及信息mytext。用戶信息就不用多說(shuō)了,主要就是mytext論壇文章的組織,要實(shí)現(xiàn)相同主題的帖子組織在一塊、跟貼緊隨父貼、后發(fā)帖居上、更重要的是要認(rèn)清父貼,否則會(huì)造成一層回復(fù)一律排在一起,二層回復(fù)排在一起,三層。。。如下: 根貼 回復(fù)1:根貼 回復(fù)2:根貼 回復(fù):回復(fù)1:根貼 。。。。 所以這里有幾個(gè)關(guān)鍵的字段: id(自動(dòng)):自動(dòng)編號(hào)(作用:顯示后來(lái)居上) rootid(整型):根貼的id(作用:實(shí)現(xiàn)相同主題的帖子排在一塊) level(整型):貼子的層數(shù)(作用:顯示的時(shí)候?qū)崿F(xiàn)縮進(jìn)) orderid(單精):相同主題帖子排序的基數(shù)(作用:相同主題帖子排序的先后依據(jù),即防止出現(xiàn)上例的情況) fatherid(整型):父貼id,貼子的血緣關(guān)系 排序的sql語(yǔ)句: select * from mytext orderby rootid desc,orderid,id desc
實(shí)現(xiàn)顯示縮進(jìn)(修正后的"不用遞歸實(shí)現(xiàn)樹形結(jié)構(gòu).."): level=0 response.write "<ul>" do while not rs.eof if rs("level")<level then for i=rs("level") to level-1 response.write "</ul>" next end if if rs("level")>level then response.write "<ul>" end if response.write "<li>主題:。。</li>" level=rs("level") rs.movenext loop response.write "</ul>" %> 注意:原"不用遞歸實(shí)現(xiàn)樹形結(jié)構(gòu)..."文章有誤,這是修改后的代碼.
另外有一點(diǎn)經(jīng)驗(yàn)要注意:就是在單精類型數(shù)據(jù)傳值的時(shí)候,如:orderid,request上來(lái)的數(shù)據(jù)要先replace(orderid," ","+"),再csng轉(zhuǎn)換,不然會(huì)報(bào)告"類型不匹配",我一開(kāi)始百思不得其解,后來(lái)發(fā)現(xiàn)在傳值的時(shí)候必定會(huì)把單精數(shù)據(jù)"+"弄丟,變成空格,所以要先替換再轉(zhuǎn)型.
以上只是我個(gè)人的看法,如果有錯(cuò)誤之處或有更好的方法歡迎交流gwlx@21cn.com,大家可以到211.90.159.61(開(kāi)放時(shí)間:8:15~17:30)或http://www.21union.net/sqlbbs看實(shí)例并多多灌水呦:)..
|