主题:  显示指定数据库记录的问题

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#12004/11/4 18:54:10
原来用select top 25 * from song order by click desc可以正常显示。

现在想再按同样的方式显示第26--50条的记录,表达式怎么写



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#22004/11/4 19:10:42
SELECT TOP 25 * FROM Song
WHERE Click <
    (SELECT MAX(Click) FROM
        (SELECT TOP 25 Click FROM Song ORDER BY Click DESC))
ORDER BY Click DESC
该方法如果存在并列25的情况,如果允许可以用此

如果并列25可以拆分25,26的话,就用

SELECT TOP 25 * FROM Song
WHERE ID NOT IN
    (SELECT TOP 25 ID FROM Song
    ORDER BY Click DESC)
ORDER BY Click DESC


非常大鱼

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#32004/11/4 20:21:17
谢谢版主,不过显示的还是1--25条。并不是26-50条



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#42004/11/4 20:55:13
对不起,应该是
SELECT TOP 25 * FROM Song
WHERE Click <
(SELECT MIN(Click) FROM
(SELECT TOP 25 Click FROM Song ORDER BY Click DESC) AS Click)
ORDER BY Click DESC

因为是倒排序,不应该用MAX。第二个可能更好些。

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2004-11-04 21:59:32)]

非常大鱼

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#52004/11/4 21:10:38
为什么!为什么显示的还是1--25!
www.52ting.net/in.asp

我是希望能在第二列里显示26--50.怎么办



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#62004/11/4 21:27:02
你的SQL怎么写的?


非常大鱼

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#72004/11/4 21:30:12
SELECT TOP 25 * FROM Song
WHERE Click <
(SELECT MIN(Click) FROM
(SELECT TOP 25 Click FROM Song ORDER BY Click DESC) AS Click)
ORDER BY Click DESC

就是你说的这样啊。

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2004-11-04 21:47:55)]


无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#82004/11/4 21:31:30
<%
dim rs
set rs=server.createobject("adodb.recordset")
sql="select top 25 * from song order by click desc"
rs.open sql,conn,1,1
%>
<table width="750" border="0" align="center" cellspacing="1" bgcolor="#0099FF">
<tr bgcolor="#FFFFFF">
<td height="15" colspan="4">top100</td>
</tr>
<%do while not rs.eof%>
<%
     dim ss_rs
set ss_rs=server.createobject("adodb.recordset")
     mulu=rs("name")
if rs("lei")=3 then
ml_sql="select mulu from data where name='&Ocirc;&shy;&acute;&acute;'"
elseif rs("lei")=4 then
ml_sql="select mulu from data where name='&micro;&yen;&Ccedil;ú'"
else
ml_sql="select mulu from data where name='"&mulu&"'"
end if
ss_rs.open ml_sql,conn,1,1
     dim i
     i=i+1
     %>
<tr bgcolor="#FFFFFF">
<td width="203"><font color="#990000"><strong><%=i%></strong></font> <a href="play.asp?mulu=<%=ss_rs("mulu")%>&filename=<%=rs("url")%>&id=<%=rs("id")%>" target="_blank">
<%=rs("song")%>
</a><font color="#009900">(<%=rs("click")%>)</font></td>
            <%sql="SELECT TOP 25 * FROM Song WHERE Click < (SELECT MIN(Click) FROM (SELECT TOP 25 Click FROM Song ORDER BY Click DESC)) ORDER BY Click DESC" %>
<td width="188"><font color="#990000"><strong><%=i%></strong></font> <a href="play.asp?mulu=<%=ss_rs("mulu")%>&filename=<%=rs("url")%>&id=<%=rs("id")%>" target="_blank">
<%=rs("song")%>
</a><font color="#009900">(<%=rs("click")%>)</font></td>
<td width="189">&nbsp;</td>
<td width="157">&nbsp;</td>
</tr>
<%
        rs.movenext
        if i>=25 then exit do
        loop
        rs.close
        ss_rs.close
        set ss_rs=nothing
        %>
</table>



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#92004/11/4 21:55:21
</a><font color="#009900">(<%=rs("click")%>)</font></td>
<%sql="SELECT TOP 25 * FROM Song WHERE Click < (SELECT MIN(Click) FROM (SELECT TOP 25 Click FROM Song ORDER BY Click DESC)) ORDER BY Click DESC" %>
<td width="188"><font color="#990000"><strong><%=i%></strong></font> <a href="play.asp?mulu=<%=ss_rs("mulu")%>&filename=<%=rs("url")%>&id=<%=rs("id")%>" target="_blank">
<%=rs("song")%>

这之后,你的rs就不打开一下,写个SQL有什么用应该
rs.open.... 一下

这是修正后的SQL
SELECT TOP 25 * FROM Song
WHERE Click <
(SELECT MIN(Click) FROM
(SELECT TOP 25 Click FROM Song ORDER BY Click DESC) AS Click)
ORDER BY Click DESC

在SQL SERVER上,我已验正了代码
SELECT TOP 10 OrderID FROM Orders
WHERE OrderID <
    (SELECT MIN(OrderID) FROM
        (SELECT TOP 10 OrderID FROM Orders
         ORDER BY OrderID DESC) AS OrderID)
ORDER BY OrderID DESC

剩下的只是你的代码问题了。


非常大鱼

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#102004/11/4 21:58:28
另外,你这个程序应该用我第二个SQL,可以排除并列相等。

建议,你的程序完全可以先选出前100个,然后分组显示,这样效率最高。这二个SQL不应该用在这里的。


非常大鱼

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#112004/11/4 22:36:46
1,前面已经open一次了,而且是同一个表,还要再打开一次吗?

2,关于这个分组显示…………还………还不会呢。 汗ing



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#122004/11/4 22:48:21
当然应该打开,每次查询应该打开。SQL只是个字符串,一定要得到执行后才有效。
得好好补补数据库。
分数即是
For 1 to 25
    if rs.eof then exit for
    '显示第一组
    rs.MoveNext
Next
For 26 to 50
    if rs.eof then exit for
    '显示第二组
    rs.MoveNext
Next
......

代码为(举例代码):

Response.Write "<table><tr>"

for i = 1 to 4
    Response.Write "<td>"
    
    for j = 1 to 25
        if rs.eoft then exit for
            ' 显示25条记录
        end if
        rs.MoveNext
    next

    Response.Write "</td>"
    
next

Response.Write "</tr></table>"

表格设计可以先设计四个列,每个列插入一个显示表格,这样四个列用四个大循环,而四个列入的小表格用25个小循环。

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2004-11-04 22:55:49)]

非常大鱼

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#132004/11/5 11:30:56
怎么提示
end if这行出错



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#142004/11/5 14:57:42
多练习一些简单的吧,基础方面还没过关,一下子稍复杂的就混了。


非常大鱼

无色光芒

职务:普通成员
等级:3
金币:1.0
发贴:1071
#152004/11/12 9:17:17
版主教训得极是。我对这个也是刚开始接触。

如果您有时间,不知可不可以给个实例呢?就是把上面的四列表格循环写个具体的页面我看一下。我试了好多次都没成功。