稍微有一点难,不过对您来说就无所谓了....

hbyhwxb 2001-03-12 11:45:00
现有一表,字段如下:
被回复者 char(10)
回复者 char(10)
回复内容 char(244)

现在要求以层次的方式显示出所有被回复者与回复者之间的关系,就是论坛上回复者与被回复者之间的关系,该用一个什么样的算法?我想只能用递归,但我自己写不出来,各位能否给指导一下?要求用asp。分我还会再加.
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbyhwxb 2001-03-12
  • 打赏
  • 举报
回复
对,就是这种效果,我想如果要递归的话,是不是每一层就要建立一个新的recordset对象,是不是递归层数多的话就太耗内存了呢?
supersonics 2001-03-12
  • 打赏
  • 举报
回复
是不是要用树型啊。
1 --
11 --
111--
12--
121--
122--
13--
是这种效果吗?
hsboy 2001-03-12
  • 打赏
  • 举报
回复
太长了,大哥
Tarloy 2001-03-12
  • 打赏
  • 举报
回复
给你一个直接能用的例子:
主要有三个文件:
forumconn.asp
tools.asp
default.asp

hfg.gif为1*1pixed的透明gif,liuyan.gif为类式"|_"的 gif
数据库结构见*.sql部分

源码如下:
·forumconn.asp·········

<%
forumname="Eric Tarloy 论坛"
tablename="forum"
set conn=server.createobject("adodb.connection")
conn.open "forum","username","passward"
'conn.open "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq="&server.mappath("forum.mdb")
%>


·default.asp···········

<!--#include file="adovbs.inc" -->
<!--#include file="tools.asp"-->
<!--#include file="forumconn.asp"-->
<%'--------------------------------------Delete begin
delete=request("delete")
selectuserid=request.form("selectuserid")
if (delete=1) and (not selectuserid="") then
set rs=server.createobject("adodb.recordset")
sql="delete from "&tablename&" where fldAuto in ("&request.form("selectuserid")&")"
rs.open sql,conn,3
'rs.close
'set rs=nothing
end if
'---------------------------------------Delete end %>

<%response.buffer = true%>

<HTML>
<HEAD>
<TITLE><%response.write forumname%></TITLE>
<%if session("netparty_loginname")="blueriver" then%>
<script language="JavaScript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
//-->
</script>
<script language='JavaScript'>
<!--

function CheckAll(checked) {
len = document.userlist.elements.length;
var i=0;
for( i=0; i<len; i++) {
if (document.userlist.elements[i].name=='selectuserid') {
document.userlist.elements[i].checked=(checked==true?true:false);
} } }
//-->
</script>
<%end if%>
<script LANGUAGE="JavaScript">
<!-- HIDE FROM OTHER BROWSERS
function validate(theForm)
{
if (theForm.Name.value == "")
{
alert("没大名,小名也可以呀!");
theForm.Name.focus();
return (false);
}

if (theForm.Title.value == "")
{
alert("标题不能为空!");
theForm.Title.focus();
return (false);
}
if (theForm.Body.value == "")
{
alert("内容不能为空!");
theForm.Body.focus();
return (false);
}
return (true);
}
// STOP HIDING FROM OTHER BROWSERS -->
</script>
<link rel="stylesheet" href="blueriver.css">
<style type="text/css">
<!--
table { font-size: 9pt}
body { font-size: 9pt}
A { text-decoration: none}
a:hover { text-decoration: underline}
-->
</style>
</HEAD>
<BODY bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" link="#996600" vlink="#999999" alink="#999999" text="#666666"><img src="liuyan.gif" width="129" height="34">
<table width="415" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top"><img src="hfg.gif" width="24" height="401"></td>
<td bgcolor="#ffffff" ><img src="hfg.gif" width="1" height="1"></td>
<td> <%
SQL = "SELECT * FROM " &tablename& " where fldReply = 0 ORDER BY fldAuto DESC"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
rs.Open sql,conn,adOpenkeyset,3
if rs.eof then
%>
<table width="400" border="0" cellspacing="0" cellpadding="0" vspace="0" hspace="0">
<tr>
<td>
<div align="left"></div>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif">
<div align="right"><img src="point.gif" width="400" height="1" vspace="0" hspace="0"></div>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom">==>></td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif"><img src="point.gif" width="400" height="1"></td>
</tr>
</table>
<%
response.write "暂无内容,请发帖子!"
else
rs.PageSize=20
LastPage=rs.PageCount

%> <%
dim pageno
if IsNumeric(Request("Pageno")) then
Pageno = CLng(Request("Pageno"))
If Pageno < 1 Then Pageno = 1
If Pageno > rs.PageCount Then Pageno = rs.PageCount
session("Pageno")=Pageno
Else
pageno=1
end if
if request("delete")=1 then pageno=session("Pageno")
%>
<table width="400" border="0" cellspacing="0" cellpadding="0" vspace="0" hspace="0">
<tr>
<td colspan="2" valign="bottom">
<div align="left"> <br>
</div>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif">
<div align="right"><img src="point.gif" width="400" height="1" vspace="0" hspace="0"></div>
</td>
</tr>
<tr bgcolor="#F6F6F6">
<td colspan="2" valign="bottom"><font> <font size="2">页数:</font></font><font size="2"><% for i=1 to rs.pagecount%>
<a href="default.asp?Pageno=<% response.write i %>"> <%if pageno=i then
response.write "<font color=""#CC0000""><u>"&i&"</u></font>"
else
response.write i
end if
%></a> <% next%> </font></td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif"><img src="point.gif" width="400" height="1"></td>
</tr>
<tr valign="top">
<td colspan="2">
<div align="right"></div>
</td>
</tr>
</table>
<form name="userlist" action="default.asp" method="post">
<h5>
<input type="hidden" name="delete" value="1">
<input type="hidden" name="page" value="1">
<%
rs.AbsolutePage =PageNo
for i=1 to rs.PageSize
varAuto = rs("fldAuto")
varName = rs("fldName")
varEmail = rs("fldEmail")
varTi = rs("fldTitle")
varBody = rs("fldBody")
varDate = rs("fldDate")
%> <b><font color="#0066CC"> <%if session("netparty_loginname")="blueriver" then%>
<input type="checkbox" name="selectuserid" value="<%=rs("fldAuto")%>">
<%end if%> </font><font size="-1" color="#CCCCCC">■</font></b><font size="-1" color="#996600">
</font><a href="reply.asp?ID=<%=varAuto%>&Reply=<%=varAuto%>"><font size="2" face="arial"><%=varTi%></font></a> <font face=arial size=2>--
<%=varName%>.<%=varDate%></font> <%If varDate=Date Then%><img src="new.gif" width="34" height="12"><%end If%>
<br>
<%
call DispSubMail(1,varAuto)
rs.MoveNext
if rs.EOF then exit for
next

%> </h5>
<%if session("netparty_loginname")="blueriver" then%>
<table width="387" border="0" cellspacing="0" cellpadding="0" height="17">
<tr valign="middle">
<td width="26" valign="top">
<div align="left">
<input
name="checkall0" onClick="CheckAll(checkall0.checked)" type="checkbox" value="ON">
</div>
</td>
<td width="80" valign="middle"><font size="-1">选择所有帖子</font></td>
<td width="281" valign="bottom"><font size="-1" color="#0066CC"> <a href='' onClick='{if(confirm("确定删除选定的帖子吗?")){userlist.action="default.asp";userlist.submit();}return false;}'>
<input type="image" border="0" name="imageField" src="delete.gif">
</a></font></td>
</tr>
</table>
<%end if%>
</form>
<%end if%>
<form action="put.asp" method="post" onSubmit="return validate(this);">
<a name="Post"></a> <%
If Request.Cookies("netparty")("Name")<>"" Then
varN = Request.Cookies("netparty")("Name")
varE = Request.Cookies("netparty")("Email")
End If
%>
<table width="384" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><img src="point.gif" width="400" height="1"></td>
</tr>
<tr bgcolor="#F6F6F6">
<td><font size="2">页数:<% for i=1 to rs.pagecount%> <a href="default.asp?Pageno=<% response.write i %>">
<%if pageno=i then
response.write "<font color=""#CC0000""><u>"&i&"</u></font>"
else
response.write i
end if
%></a> <% next%> </font></td>
</tr>
<tr>
<td height="2"><img src="point.gif" width="400" height="1"></td>
</tr>
</table>
<table>
<tr>
<td colspan="3"> </td>
</tr>
<tr>
<td><font face="arial">大名:</font></td>
<td colspan="2">
<input type="Text" name="Name" size="20" value="<%=varN%>" class="blueriver">
</td>
</tr>
<tr>
<td><font face="arial">Email:</font></td>
<td colspan="2">
<input type="Text" name="Email" size="40" value="<%=varE%>" class="blueriver">
</td>
</tr>
<tr>
<td><font face="arial">标题:</font></td>
<td colspan="2">
<input type="Text" name="Title" size="40" class="blueriver">
</td>
</tr>
<tr>
<td valign="top"><font face="arial">内容:</font></td>
<td colspan="2">
<textarea name="Body" cols="50" rows="10" wrap="virtual" class="blueriver"></textarea>
</td>
</tr>
<tr>
<td valign="middle"><img src="point.gif" width="1" height="1"></td>
<td colspan="2">
<input type="image" border="0" name="imageField2" src="send.gif" width="46" height="17">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</BODY>
</HTML>


·tools.asp·············

<%
'----
Function InsertAP(n)
If n <> "" Then
If Instr(n,"'")<>0 Then
InsertAP = Replace(n,"'","''")
Else
InsertAP = n
End If
End If
End Function

Sub DispSubMail(layer,id)
'layer: how many spaces to insert in
SQL2 = "SELECT * FROM " &tablename& " WHERE fldReply = " & cInt(id) & " ORDER BY fldAuto"
Set rs2 = conn.Execute(SQL2)
do until rs2.eof
varAuto2 = rs2("fldAuto")
varName2 = rs2("fldName")
varEmail2 = rs2("fldEmail")
varTi2 = rs2("fldTitle")
varBody2 = rs2("fldBody")
varDate2 = rs2("fldDate")
str=""
if session("netparty_loginname")="blueriver" then
response.write "<input type=""checkbox"" name=""selectuserid"" value="""&rs2("fldAuto")&""">"
end if
for j=1 to layer
str=str & "<img src=blank.gif WIDTH=15 HEIGHT=12>"
next
str=str & "<b><img src=re.gif WIDTH=17 HEIGHT=12><a href='reply.asp?ID=" & varAuto2 & "&Reply=" & varAuto2 & "'><font size=2 face=arial>" & varTi2 & "</a></font> <font face=arial size=2>-- " & varName2 & ". " & varDate2 & "</font> "
If varDate2=Date Then
str=str & "<img src=new.gif WIDTH=34 HEIGHT=12>"
end If
str=str & "</b><br>"
Response.Write(str)
call DispSubMail(layer+1,varAuto2)
rs2.movenext
loop
End Sub
%>





·forum.sql



C R E A T E T A B L E [ d b o ] . [ f o r u m ] (
[ f l d A u t o ] [ i n t ] N O T N U L L ,//自动赋值,整数,从1或0开始
[ f l d R e p l y ] [ i n t ] N U L L ,
[ f l d N a m e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d E m a i l ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d C a t e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d T i t l e ] [ n t e x t ] N U L L ,
[ f l d B o d y ] [ n t e x t ] N U L L ,
[ f l d D a t e ] [ s m a l l d a t e t i m e ] N U L L
) O N [ P R I M A R Y ] T E X T I M A G E _ O N [ P R I M A R Y ]
G O
Tarloy 2001-03-12
  • 打赏
  • 举报
回复
给你一个直接能用的例子:
主要有三个文件:
forumconn.asp
tools.asp
default.asp

hfg.gif为1*1pixed的透明gif,liuyan.gif为类式"|_"的 gif
数据库结构见*.sql部分

源码如下:
·forumconn.asp·········

<%
forumname="Eric Tarloy 论坛"
tablename="forum"
set conn=server.createobject("adodb.connection")
conn.open "forum","username","passward"
'conn.open "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq="&server.mappath("forum.mdb")
%>


·default.asp···········

<!--#include file="adovbs.inc" -->
<!--#include file="tools.asp"-->
<!--#include file="forumconn.asp"-->
<%'--------------------------------------Delete begin
delete=request("delete")
selectuserid=request.form("selectuserid")
if (delete=1) and (not selectuserid="") then
set rs=server.createobject("adodb.recordset")
sql="delete from "&tablename&" where fldAuto in ("&request.form("selectuserid")&")"
rs.open sql,conn,3
'rs.close
'set rs=nothing
end if
'---------------------------------------Delete end %>

<%response.buffer = true%>

<HTML>
<HEAD>
<TITLE><%response.write forumname%></TITLE>
<%if session("netparty_loginname")="blueriver" then%>
<script language="JavaScript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
//-->
</script>
<script language='JavaScript'>
<!--

function CheckAll(checked) {
len = document.userlist.elements.length;
var i=0;
for( i=0; i<len; i++) {
if (document.userlist.elements[i].name=='selectuserid') {
document.userlist.elements[i].checked=(checked==true?true:false);
} } }
//-->
</script>
<%end if%>
<script LANGUAGE="JavaScript">
<!-- HIDE FROM OTHER BROWSERS
function validate(theForm)
{
if (theForm.Name.value == "")
{
alert("没大名,小名也可以呀!");
theForm.Name.focus();
return (false);
}

if (theForm.Title.value == "")
{
alert("标题不能为空!");
theForm.Title.focus();
return (false);
}
if (theForm.Body.value == "")
{
alert("内容不能为空!");
theForm.Body.focus();
return (false);
}
return (true);
}
// STOP HIDING FROM OTHER BROWSERS -->
</script>
<link rel="stylesheet" href="blueriver.css">
<style type="text/css">
<!--
table { font-size: 9pt}
body { font-size: 9pt}
A { text-decoration: none}
a:hover { text-decoration: underline}
-->
</style>
</HEAD>
<BODY bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" link="#996600" vlink="#999999" alink="#999999" text="#666666"><img src="liuyan.gif" width="129" height="34">
<table width="415" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top"><img src="hfg.gif" width="24" height="401"></td>
<td bgcolor="#ffffff" ><img src="hfg.gif" width="1" height="1"></td>
<td> <%
SQL = "SELECT * FROM " &tablename& " where fldReply = 0 ORDER BY fldAuto DESC"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
rs.Open sql,conn,adOpenkeyset,3
if rs.eof then
%>
<table width="400" border="0" cellspacing="0" cellpadding="0" vspace="0" hspace="0">
<tr>
<td>
<div align="left"></div>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif">
<div align="right"><img src="point.gif" width="400" height="1" vspace="0" hspace="0"></div>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom">==>></td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif"><img src="point.gif" width="400" height="1"></td>
</tr>
</table>
<%
response.write "暂无内容,请发帖子!"
else
rs.PageSize=20
LastPage=rs.PageCount

%> <%
dim pageno
if IsNumeric(Request("Pageno")) then
Pageno = CLng(Request("Pageno"))
If Pageno < 1 Then Pageno = 1
If Pageno > rs.PageCount Then Pageno = rs.PageCount
session("Pageno")=Pageno
Else
pageno=1
end if
if request("delete")=1 then pageno=session("Pageno")
%>
<table width="400" border="0" cellspacing="0" cellpadding="0" vspace="0" hspace="0">
<tr>
<td colspan="2" valign="bottom">
<div align="left"> <br>
</div>
</td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif">
<div align="right"><img src="point.gif" width="400" height="1" vspace="0" hspace="0"></div>
</td>
</tr>
<tr bgcolor="#F6F6F6">
<td colspan="2" valign="bottom"><font> <font size="2">页数:</font></font><font size="2"><% for i=1 to rs.pagecount%>
<a href="default.asp?Pageno=<% response.write i %>"> <%if pageno=i then
response.write "<font color=""#CC0000""><u>"&i&"</u></font>"
else
response.write i
end if
%></a> <% next%> </font></td>
</tr>
<tr>
<td colspan="2" valign="bottom" background="point.gif"><img src="point.gif" width="400" height="1"></td>
</tr>
<tr valign="top">
<td colspan="2">
<div align="right"></div>
</td>
</tr>
</table>
<form name="userlist" action="default.asp" method="post">
<h5>
<input type="hidden" name="delete" value="1">
<input type="hidden" name="page" value="1">
<%
rs.AbsolutePage =PageNo
for i=1 to rs.PageSize
varAuto = rs("fldAuto")
varName = rs("fldName")
varEmail = rs("fldEmail")
varTi = rs("fldTitle")
varBody = rs("fldBody")
varDate = rs("fldDate")
%> <b><font color="#0066CC"> <%if session("netparty_loginname")="blueriver" then%>
<input type="checkbox" name="selectuserid" value="<%=rs("fldAuto")%>">
<%end if%> </font><font size="-1" color="#CCCCCC">■</font></b><font size="-1" color="#996600">
</font><a href="reply.asp?ID=<%=varAuto%>&Reply=<%=varAuto%>"><font size="2" face="arial"><%=varTi%></font></a> <font face=arial size=2>--
<%=varName%>.<%=varDate%></font> <%If varDate=Date Then%><img src="new.gif" width="34" height="12"><%end If%>
<br>
<%
call DispSubMail(1,varAuto)
rs.MoveNext
if rs.EOF then exit for
next

%> </h5>
<%if session("netparty_loginname")="blueriver" then%>
<table width="387" border="0" cellspacing="0" cellpadding="0" height="17">
<tr valign="middle">
<td width="26" valign="top">
<div align="left">
<input
name="checkall0" onClick="CheckAll(checkall0.checked)" type="checkbox" value="ON">
</div>
</td>
<td width="80" valign="middle"><font size="-1">选择所有帖子</font></td>
<td width="281" valign="bottom"><font size="-1" color="#0066CC"> <a href='' onClick='{if(confirm("确定删除选定的帖子吗?")){userlist.action="default.asp";userlist.submit();}return false;}'>
<input type="image" border="0" name="imageField" src="delete.gif">
</a></font></td>
</tr>
</table>
<%end if%>
</form>
<%end if%>
<form action="put.asp" method="post" onSubmit="return validate(this);">
<a name="Post"></a> <%
If Request.Cookies("netparty")("Name")<>"" Then
varN = Request.Cookies("netparty")("Name")
varE = Request.Cookies("netparty")("Email")
End If
%>
<table width="384" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><img src="point.gif" width="400" height="1"></td>
</tr>
<tr bgcolor="#F6F6F6">
<td><font size="2">页数:<% for i=1 to rs.pagecount%> <a href="default.asp?Pageno=<% response.write i %>">
<%if pageno=i then
response.write "<font color=""#CC0000""><u>"&i&"</u></font>"
else
response.write i
end if
%></a> <% next%> </font></td>
</tr>
<tr>
<td height="2"><img src="point.gif" width="400" height="1"></td>
</tr>
</table>
<table>
<tr>
<td colspan="3"> </td>
</tr>
<tr>
<td><font face="arial">大名:</font></td>
<td colspan="2">
<input type="Text" name="Name" size="20" value="<%=varN%>" class="blueriver">
</td>
</tr>
<tr>
<td><font face="arial">Email:</font></td>
<td colspan="2">
<input type="Text" name="Email" size="40" value="<%=varE%>" class="blueriver">
</td>
</tr>
<tr>
<td><font face="arial">标题:</font></td>
<td colspan="2">
<input type="Text" name="Title" size="40" class="blueriver">
</td>
</tr>
<tr>
<td valign="top"><font face="arial">内容:</font></td>
<td colspan="2">
<textarea name="Body" cols="50" rows="10" wrap="virtual" class="blueriver"></textarea>
</td>
</tr>
<tr>
<td valign="middle"><img src="point.gif" width="1" height="1"></td>
<td colspan="2">
<input type="image" border="0" name="imageField2" src="send.gif" width="46" height="17">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</BODY>
</HTML>


·tools.asp·············

<%
'----
Function InsertAP(n)
If n <> "" Then
If Instr(n,"'")<>0 Then
InsertAP = Replace(n,"'","''")
Else
InsertAP = n
End If
End If
End Function

Sub DispSubMail(layer,id)
'layer: how many spaces to insert in
SQL2 = "SELECT * FROM " &tablename& " WHERE fldReply = " & cInt(id) & " ORDER BY fldAuto"
Set rs2 = conn.Execute(SQL2)
do until rs2.eof
varAuto2 = rs2("fldAuto")
varName2 = rs2("fldName")
varEmail2 = rs2("fldEmail")
varTi2 = rs2("fldTitle")
varBody2 = rs2("fldBody")
varDate2 = rs2("fldDate")
str=""
if session("netparty_loginname")="blueriver" then
response.write "<input type=""checkbox"" name=""selectuserid"" value="""&rs2("fldAuto")&""">"
end if
for j=1 to layer
str=str & "<img src=blank.gif WIDTH=15 HEIGHT=12>"
next
str=str & "<b><img src=re.gif WIDTH=17 HEIGHT=12><a href='reply.asp?ID=" & varAuto2 & "&Reply=" & varAuto2 & "'><font size=2 face=arial>" & varTi2 & "</a></font> <font face=arial size=2>-- " & varName2 & ". " & varDate2 & "</font> "
If varDate2=Date Then
str=str & "<img src=new.gif WIDTH=34 HEIGHT=12>"
end If
str=str & "</b><br>"
Response.Write(str)
call DispSubMail(layer+1,varAuto2)
rs2.movenext
loop
End Sub
%>





·forum.sql



C R E A T E T A B L E [ d b o ] . [ f o r u m ] (
[ f l d A u t o ] [ i n t ] N O T N U L L ,//自动赋值,整数,从1或0开始
[ f l d R e p l y ] [ i n t ] N U L L ,
[ f l d N a m e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d E m a i l ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d C a t e ] [ n v a r c h a r ] ( 5 0 ) N U L L ,
[ f l d T i t l e ] [ n t e x t ] N U L L ,
[ f l d B o d y ] [ n t e x t ] N U L L ,
[ f l d D a t e ] [ s m a l l d a t e t i m e ] N U L L
) O N [ P R I M A R Y ] T E X T I M A G E _ O N [ P R I M A R Y ]
G O
supersonics 2001-03-12
  • 打赏
  • 举报
回复
对不起,刚才上文中的newlevel=level+1(=2)
supersonics 2001-03-12
  • 打赏
  • 举报
回复
先申明,我的系统没有经过实际的检验,只能说我给你的是一份设计思想,你需要自己理解再修改(甚至会有想象不到的问题)。
数据库(我用的是sqlserver):你那张表需要改为以下字段(我只用到1,2, 3两个字段):
1 id(自动赋值,整数,从1或0开始)
2 value(double浮点)
3 level
4 topic
5 content
6...(更新timestamp什么的)
由于时间太长了,我找不到当时的源代码,只能陈述一下思路:
1显示:
select * from table order by value就可以了。
因为在插入记录时,已经保证value控制记录的先后,就是说,即使122在13后才插入数据库,122对应的value值也小于13对应的value值。(122,13的位置见我第一次的答复)
由level来保证缩进:level=0就不缩进,level=1,在response.write前多写几个" "就是了,其他的以此类推。诸如分页之类的事就自己考虑了。
2插入记录
这里只叙述算法
要求插入记录时得到以下信息:
a.如果是新建论题,只要得到topic,content
insert into table(value,level,..) values(-1,0,...)
select id from table where value = -1
update table set value = "selected id" where id = "selected id"
b.如果是对论题(比如id=1000,value=1000.5,level=1) 的回复,得到id(=1000),value(=1000.5),topic,content
那么答复的newlevel=1,id由数据库自动管理,现在只要得到新的value就可以了。
求新value值:
I: 得到rs
rs的打开:sql = "select value,level from table where value >= "gotvalue(1000.5)"
II:
rs.movenext
dim value1,value2
value1 = rs("value")
value2 = id(=1000)
while rs("level") >= newlevel and not rs.eof
rs.movenext
value1 = rs("value")
wend
if not rs.eof then
value2 = rs("value")
else
value2 = value2 + 1
end if
newvalue=(value1 + value2)/2
-------------------------------------------
先试着去理解,如果有什么疑问再提出来。



flyants0 2001-03-12
  • 打赏
  • 举报
回复
落叶::::我也要。可以给我一份的吗、?????diguage@sina.com
hbyhwxb 2001-03-12
  • 打赏
  • 举报
回复
谢谢落叶狂风老兄的热心帮助,我可以得到数据库的支持,只是不知该怎么办,能告诉我吗?不好意思,刚才我去吃饭去了。
supersonics 2001-03-12
  • 打赏
  • 举报
回复
我做过一个。
不过需要数据库的支持(需要修改你的表,也许还要添加一张表)。
如果你可以取得数据库的支持,我就把我的做法告诉你。

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧