主题:  帮帮我吧!烦死了

micehui

职务:普通成员
等级:1
金币:0.0
发贴:28
注册:2003/11/4 11:08:56
#12003/11/20 11:15:12
关于树型论坛的问题


现在有几个主要字段:

ID (帖子ID,自动增加)

rootID (主帖ID,其子帖跟父贴拥有相同的rootID)

orders (同父帖子的序号)

parentID (父帖的ID,主帖为0)

layer (层的ID,主帖为0,次帖为1............)

怎样让主帖和子帖按照不同的排列方式排列,

比如说新浪论坛,主帖是倒序,子帖了升序

请问排序语句怎么写!!!??

这个怎么实现呢,谢谢!



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
注册:2004/2/18 11:17:25
#22003/11/20 11:23:58
想用一个SELECT语句来完成,可能性不大.
比如说新浪论坛,主帖是倒序,子帖了升序,你也是点击了主题贴才能进去查看跟贴吧.


难人一个……

micehui

职务:普通成员
等级:1
金币:0.0
发贴:28
注册:2003/11/4 11:08:56
#32003/11/20 11:35:23
那就是说要增加一个字段来控制子帖的排序喽?

我用orders排了N次也没能排出来

用select语句真的无能为力了吗?



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
注册:2004/2/18 11:17:25
#42003/11/20 11:49:37
你总不会把所有的主题和子贴都混在一个页面里显示吧.
可能我还不太明白你的意思,但是新浪的新闻和讨论是分开来的呀,
你可以在一个页面把所有的主题显示出来,点击这个主题以后再来查看它的跟贴,象这里的论坛一样,有什么不妥吗?


难人一个……

沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
注册:2004/2/18 11:17:25
#52003/11/20 11:57:23
如果你想把所有的贴子的主题和子贴全部在一个页面中按要求显示也可以呀:一个欠套循环了,
外循环:select 主题 *** order by id desc
内循环: select 子贴 *** order by ** asc


难人一个……

micehui

职务:普通成员
等级:1
金币:0.0
发贴:28
注册:2003/11/4 11:08:56
#62003/11/20 13:15:09
谢谢arhui的指点,hui字辈的都是好样的。:D

我刚才说的是新浪论坛,不是新闻,看这个

bbs7.sina.com.cn

-------------------------------------------------------------
现在我是用这个语句的,
     rs.close
     'AnnounceID,parentID,child,boardID,userID,UserName,UserEmail,URL,URLTitle,URLPic,Topic,DateAndTime,hits,length,RootID
     if selStr<>"()" then
sql="select AnnounceID,parentID,child,boardID,userID,UserName,UserEmail,URL,URLTitle,URLPic,Topic,DateAndTime,hits,length,RootID,layer,orders from Announce where BoardID="&cstr(boardID)&" and ( RootID in "&selStr& " ) ORDER BY rootID desc,orders"
     else
     sql="select AnnounceID,parentID,child,boardID,userID,UserName,UserEmail,URL,URLTitle,URLPic,Topic,DateAndTime,hits,length,RootID,layer,orders from Announce where BoardID="&cstr(boardID)&" ORDER BY RootID desc,orders "
     end if
-----------------------------------------------------------------------

外循环和内循环具体怎么用?



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
注册:2004/2/18 11:17:25
#72003/11/20 14:01:40
sql="select AnnounceID,parentID,child,boardID,userID,UserName,UserEmail,URL,URLTitle,URLPic,Topic,DateAndTime,hits,length,RootID,layer,orders from Announce where BoardID="&cstr(boardID)&" ORDER BY RootID desc
'在设计论坛表结构的时候你要设计一个字段来判断这个贴子是主题贴,还是回复贴,另外再设计一个字段来储蓄子贴回复的是哪个主题贴的ID,思路就是这样的了.
sql_1="select * form announce where 储存父贴ID="&parentID

我表达能力不太行,不知道你是否明白.


难人一个……

micehui

职务:普通成员
等级:1
金币:0.0
发贴:28
注册:2003/11/4 11:08:56
#82003/11/20 15:01:43
其实你说的这两个字段都存在了,
可以用layer这个字段来控制啊,layer=0也肯定是主帖啊

还有叛断子帖回复的是哪个主题帖可以用parentID来判断啊,parentID就是本帖的父帖的ID啊。。

就是不知道具体的做法
-------------------------------------------------------

看看这个论坛
www.tlwx.com/book/aaa/index.html

我想把同父的子帖排序改一下!让后发的子帖显示在下面,早发的帖子在上面。

那么,list.asp这个文件中的代码如何改动才能实现??

原码下载地址是:
www.tlwx.com/book/aaa/aaa.zip



micehui

职务:普通成员
等级:1
金币:0.0
发贴:28
注册:2003/11/4 11:08:56
#92003/11/21 13:52:54
下面这段代码是现在控制orders字段的数值变化的!!

-------------------------------------------------------------------------------
if foundError=false then
dim rsLayer
set rsLayer=conn.execute("select layer,orders from announce where announceid="&cstr(parentid))
if not(rsLayer.eof and rsLayer.bof) then
if isnull(rsLayer(0)) then
iLayer=0
else
iLayer=rslayer(0)
end if
if isNUll(rslayer(1)) then
iOrders=0
else
iOrders=rslayer(1)
end if
else
iLayer=0
iOrders=0
end if
if rootid<>0 then
iLayer=ilayer+1
conn.execute "update announce set orders=orders+1 where rootid="&cstr(RootID)&" and orders>"&cstr(iOrders)
iOrders=iOrders+1
end if

--------------------------------------------------------------------------------

现在的显示的情况是子帖都是倒序的,
怎么改才能让子帖升序呢?谢谢