网上买衣服哪里质量好:关于ASP新闻系统中的搜索功能

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/27 05:41:11
有很多asp网站上都有搜索的功能,我看了看后台的程序,大概都是对数据库的遍历,但是我对结果的表现方式不太明白,文件search.asp大概的情形如下:这是接收查询的字符串
<%
key=request("key")
if key="" then
response.write "<script>alert('查找字符串不能为空!');history.back();</Script>"
response.end
end if
%>

中间的html省略,然后是这里是查询的过程
<%
Set rs= Server.CreateObject("ADODB.Recordset")
sql="select * from NEWS where (title Like '%"& key &"%' or content Like '%"& key &"%' ) order by id desc"
rs.open sql,conn,1,1
if rs.eof and rs.bof then
response.write "<p align='center'>对不起,没有找到相关新闻</p>"
else
%>
在最后显示结果
<%
i=0
do while not rs.eof
%>
<tr bgcolor="#FFFFFF">
<td height="22" align="center"><%=rs("id")%></td>
<td> <a href="ONEWS.asp?id=<%=rs("id")%>" target="_blank"><%=rs("title")%></a></td>
<td align="center"><%=left(rs("user"),5)%></td>
<td align="center"><%=rs("infotime")%></td>
</tr>
<%
rs.movenext
i=i+1
loop
%>

显示的结果按照序列号,标题,作者时间的方式来排的,我想请教各位的就是我想实现如下的显示结果,我打个比方,我这个新闻系统有三个大类,如深圳新闻,北京新闻,武汉新闻,然后我分别在这三个大类里面进行输入新闻,现在深圳新闻和武汉新闻里面有个关于“台风”的新闻,我输入“台风”搜索,search.asp显示的结果是首先出现“深圳新闻”这个大类的名称,然后在它下面出现属于“深圳新闻”里的含有“台风”的新闻,由于北京新闻里面没有“台风”的新闻,所以不显示,在最下面显示“武汉新闻”大类名称,底下是“武汉新闻”里符合“台风”的消息,该怎么写这个代码呢?
顺便问一下,百度知道的个人帐户里面有个“我的消息”,点开一个消息后,消息标题的下方就会出现信息的正文,请问怎么实现?
PS我对asp不输,还请各位高手指点
weiweiok,非常感谢你写的代码。调试成功了。但是还有一个小小的问题。最后搜索出来的结果是先把所有的大类名称写了出来
Response.Write(Beijin & Shenzhen & Wuhan & Other,这句把符合的名称都先写了出来。
然后 才是每个大类底下的符合的新闻。
但是我想实现的是首先出现beijing。然后是beijing中符合搜索字的新闻。在然后出现shenzhen。接着是shenzhen中符合搜索字的新闻,以此类推。不符合的大类不显示。你写的代码已经实现不符合的大类不显示了。现在就是一个显示的顺序问题,麻烦大哥在看看代码,非常感谢。谢谢了

1.先在新闻表里加个字段,保存城市名.

2.搜索页里先建三个变量,分别存深圳\北京\武汉的搜索结果.

3.然后用你上面代码搜索

4.最后在循环的时候,判断一下城市字段,如果是深圳,就放深圳变量里,如果是北京就放北京变量里.

5.循环完了以后,在分别判断一下,如果有数据就显示出来

操作步骤因为要涉及到编辑数据库,具体代码要根据你数据库的改动而改动,所以就不写了.

━━━━━━━━━━━━━━━━━━━━━━━━━

根据楼主的补充要求,补充回答如下:

■1.修改数据库

给你的 “数据库” 中的 “NEWS”表 增加一个字段 “ChengShi”类型为字符串型 ,然后打开该表,表里的所有新闻都会多出一个 ChengShi 字段,内容全是空的,然后你自己输入“北京”或者“深圳”或者“武汉”

■2.修改你的ASP代码(在你上面提供的源代码基础上改)

------------------------------------------------------
<%
i=0
do while not rs.eof
%>
<tr bgcolor="#FFFFFF">
<td height="22" align="center"><%=rs("id")%></td>
<td> <a href="ONEWS.asp?id=<%=rs("id")%>" target="_blank"><%=rs("title")%></a></td>
<td align="center"><%=left(rs("user"),5)%></td>
<td align="center"><%=rs("infotime")%></td>
</tr>
<%
rs.movenext
i=i+1
loop
%>
------------------------------------------------------
把上面的代码删除掉,替换成下面的:
------------------------------------------------------
<%
Beijin="":Shenzhen="":Wuhan="":Other="":s=""

i=0
do while not rs.eof

s=""
s=s & "<tr bgcolor=#FFFFFF><td height=22 align=center>"
s=s & rs("id") & "</td><td><a target=_blank href=ONEWS.asp?id=" & rs("id") & ">"
s=s & rs("title") & "</a></td><td align=center>" & left(rs("user"),5)
s=s & "</td><td align=center>" & rs("infotime") & "</td></tr>"

Select Case rs("ChengShi")
Case "北京"
Beijin=Beijin & s
Case "深圳"
Shenzhen=Shenzhen & s
Case "武汉"
Wuhan=Wuhan & s
Case Else
Other=Other & s
Else

rs.movenext
i=i+1
loop

if Beijin<>"" then Beijin="北京新闻:<table>" & Beijin & "</table>"
if Shenzhen<>"" then Shenzhen="深圳新闻:<table>" & Shenzhen & "</table>"
if Wuhan<>"" then Wuhan="武汉新闻:<table>" & Wuhan & "</table>"
if Other<>"" then Other="其他地区新闻:<table>" & Other & "</table>"

Response.Write(Beijin & Shenzhen & Wuhan & Other)
%>

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

■3.完成

通过上面两步修改,就可以实现你的功能了,但是:

<1> 前提是你在第一步的数据库修改中没有出错。
<2> 第二步中的代码我没测试过,不敢保证复制过去绝对能用。

■06.7.21 回应楼主:

我自己测试了下代码,显示效果如下:

北京新闻
┏━━━━━━━━━━━━━━━┓
┠———————————————┨
┠————北京新闻列表—————┨
┠———————————————┨
┗━━━━━━━━━━━━━━━┛
武汉新闻
┏━━━━━━━━━━━━━━━┓
┠———————————————┨
┠————武汉新闻列表—————┨
┠———————————————┨
┗━━━━━━━━━━━━━━━┛
深圳新闻
┏━━━━━━━━━━━━━━━┓
┠———————————————┨
┠————深圳新闻列表—————┨
┠———————————————┨
┗━━━━━━━━━━━━━━━┛

应该不可能是你描述的样子的,上面的代码都是把标题加到对应的表格前面的,可能是你的页面嵌套的格式所导致排列出错.

最后你可以尝试修改最后一段代码:

if Beijin<>"" then Beijin="<p>北京新闻:</p><p><table>" & Beijin & "</table></p>"
if Shenzhen<>"" then Shenzhen="<p>深圳新闻::</p><p><table>" & Shenzhen & "</table></p>"
if Wuhan<>"" then Wuhan="<p>武汉新闻::</p><p><table>" & Wuhan & "</table></p>"
if Other<>"" then Other="<p>其他地区新闻::</p><p><table>" & Other & "</table></p>"

加QQ522343207
详细解释给你听!

百度的哪个消息应该是调用JS吧,HTML中设置display 的=""或是none来变换吧

SQL="Select 新闻分类,新闻标题 From 表名 Where 限制条件"
Set Rs=Conn.Execute(SQL)
Do While Not Rs.Eof
Select Case Rs("新闻分类")
Case "深圳新闻"
HtmlTemp1=HtmlTemp1&Rs("新闻标题")
Case "北京新闻"
HtmlTemp2=HtmlTemp2&Rs("新闻标题")
Case "上海新闻"
HtmlTemp3=HtmlTemp3&Rs("新闻标题")
End Select
Rs.MoveNext
Loop
Rs.Close:Set Rs=Nothing
Response.Write HtmlTemp1&HtmlTemp2&HtmlTemp3

具体格式自己再编编.

百度的消息如楼上所说,通过设置td的style属性里的display实现.
js代码如下:
script language=JavaScript1.2>
function showsubmenu(sid) {
var whichEl = eval("submenu" + sid);
var menuTitle = eval("menuTitle" + sid);
if (whichEl.style.display == "none"){
eval("submenu" + sid + ".style.display=\"\";");
}else{
eval("submenu" + sid + ".style.display=\"none\";");
}
}
</script>

表格的td名称设置要符合js的要求,例如:
<td align="left" height=25 style="cursor:hand;" id=menuTitle2 onclick="showsubmenu(2)">