论坛: 网站建设 标题: [询问]怎么控制一页显示的文章数目? 复制本贴地址    
作者: TomyXu [tomyxu]    论坛用户   登录
我在写论坛的时候,突然吧!发现一个问题哈!就是怎么控制每页显示的文章树木啊?我数据库里的文章一下子就全显示在一个页面上了
求急!!!

地主 发表时间: 08/16 21:01

回复: xiean [xiean]   论坛用户   登录
select .................... where ..... limit PAGE, 30

page就是 (页数-1)×30

B1层 发表时间: 08/17 02:32

回复: TomyXu [tomyxu]   论坛用户   登录
不好使!能讲的详细点吗?limit page,30  到底是什么意思?举个例子讲讲啊!limit好像不是系统的关键字啊!我是这么写的:
mysql="select * from userpage limit 1,30"  //问题就出在这里啊!这里怎么写???
rs.open mysql,con,1,3


B2层 发表时间: 08/17 20:30

回复: xiean [xiean]   论坛用户   登录
你从哪知道 limit 不是sql查询语句关键字的?

建议你仔细看看sql查询语句的应用

B3层 发表时间: 08/18 13:38

回复: TomyXu [tomyxu]   论坛用户   登录
系统提示。FROM字句错误!"limit 1,30"

B4层 发表时间: 08/20 20:28

回复: xiean [xiean]   论坛用户   登录
这不是limit错,from表名有问题,你试着把表名用单引起来

B5层 发表时间: 08/20 21:46

回复: TomyXu [tomyxu]   论坛用户   登录
不行啊!
我是这么写的:
mysql="select * from 'userlist' limit 1,30"
然后下面是
rs.open mysql,con,1,3
我按你说的!把表名单引起来了!可还是不好使啊!系统说

Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005' 
[Microsoft][ODBC Microsoft Access 驱动程序] 查询语法错误。查询子句不完整。 

/student/main.asp, 行90 

还有就是limit 后面到底怎么写啊?1,30对吗?


B6层 发表时间: 08/21 19:37

回复: xiean [xiean]   论坛用户   登录
一般你还要加上条件语句的,类似于
where aaa = 'xxx' 再 limit 0, 30

另外,你也可加上排序 order by aaaa 等,你可以查查 sql 语句说明

B7层 发表时间: 08/21 21:54

回复: xiean [xiean]   论坛用户   登录
先说明一下,limit 的方式是我说错了,查了一下,在 MSSQL, ORACLE 里无法使用 limit 的,不过有其它的办法,以下是我摘录的一段


-----------------------------------
说一下关于在ORACLE中sql语句里无法使用limit的处理方式  
我做jsp的平台是在linux6.2下,jdk1.3,mysql。  
在我前一篇samples里面的sql语句是这样的:  
sql = "select a_id,a_title,a_author,aID,a_time,a_readtime,sID from article order by a_id desc limit "+ spage +","+ ipage;  

这句sql在mysql调试是没有问题的,但在ORACLE下,问题就出来了  
ORACLE不认这种形式。  
但我们可以用变通一点的办法,我也给个示例:  

sql = "select a_id,a_title,a_author,aID,a_time,a_readtime,sID from article order by a_id";  

int a;  
while (rs.next()) {  
a++;  
if (a<spage||a>=ipage+spage)continue;  
...  
}  
-----------------------------------------

B8层 发表时间: 08/23 10:19

回复: TomyXu [tomyxu]   论坛用户   登录
真是谢谢你的耐心!可我用的是ACCESS数据库!不晓得该怎么写!
别告诉我不能用litmit方法!!
还有,就了limit方法后怎么当我点击“下一页”的时候怎么做才可以使下一页显示的内容是接上一页的?

B9层 发表时间: 08/23 19:59

回复: xiean [xiean]   论坛用户   登录
首先说明 limit 作用,limit 有两个参数,第一个是记录偏移量,第二个是取出记录数。

比如 "select * from user limit 10, 30" 这句里,我们假设 user 表内放有200个用户记录,那么在此 limit 的作用就是限制返回的记录数,从第 10 + 1 个用户开始,取30个用户数据返回,如果在此没有定义 limit 的话,将会返回 200 个用户数据。

至于你所说的怎么实现上一下,下一页的无缝连接,这其实和查询语句无关,和你的代码有关,这实际上是一个数学题,如下
"limit x, y"
当 page = ? 时, x = ?, y = ?,我们列一下看看
(page = 1 是第一页,其中要算的值只有x,因为y是列出多少结果,所以y的值从其它地方取得,在此以30为例)
page = 1; x = 0; y = 30;
page = 2; x = 30; y = 30;
page = 3; x = 60; y = 30;
page = 10; x = 270; y = 30;
如此一排,我想你该算出来 page 和 x 的算法了吧

limit 说完了,但我要遗憾的告诉你,我刚才翻阅的 ACCESS/MSSQL 的资料里,没有 LIMIT 关键字,其它任何把结果分段的关键字都没有,因为我不用ASP,也不用 ACCESS/MSSQL,所以,我能帮你的有限,我把我所得到的结果列一下

1. 在 ACCESS/MSSQL 中,在查询时,无法分页,也就是说,你只有一古脑把该表的内容全拉出来再用。这种坏处是显而易见的,因为表的内容少还可以,要是以万为单位的记录,这种方式查询将是可怕的。所以,在你查询的时候,尽量少的,按需要取出列值。比如一个user表有 name, pass, question, answer, address, email,这时,如果你只是登录用代码的话,那么你只需要 user, pass 两个字段,所以你最好把

select * from user where name = 'xiean'
简化成
select pass from user where name = 'xiean'

这样多少会优化处理速度,另外,你还可以用更专业的方式来处理,在此,我们假设 pass 列里的值全部是经过 MD5 加密,那么你可以把用户输的密码先加密一次,验证就用下面的语句

select count(*) from user where name = 'xiean' and pass = 'asdfUUxcu823sf'

不知道你看懂了没,基中 'asdfUUxcu823sf' 是用户输的密码加密过的结果,在此, count(*) 是返回符合的行数,那么,如果返回 1,则验证通过,返回 0 则是说没有符合的行,那么当然验证不通过


2. 刚才说了处理方法,但只用于优化查询,再来说说实际实现分页的方式,在ASP中,实现数据分页要用到 ADO Recordset 对象,具体的参数你可以查阅

  http://bbs.yesky.com/book/html/2437.html  

3. 在 2. 中所说的Recordset对象也有实用上的问题,就像我举例的,要有上万的记录或上百万的记录该怎么办了呢?有个折衷的建议,那就是利用临时表查询数据,然后分页显示,具体实现可以采用临时表存放数据查询结果,根据结果实现分页,这样对于复杂的查询,特别是涉及到多表的数据查询,如果直接使用查询条件,系统的开销将很大,利用临时表把数据先保存,然后处理。这样对数据库的查询只要开销一次。具体实现我没有例子,我ASP只会看,不会写,呵呵,你可以自己试试,不过我想,你需要这样做的机会并不多。。。

以上就是我整理出的结果,再次证明 Unix 是完美的,M$整一个白痴。。数据查询分页都没。。。也许是我BC,但。。。至少。我在ACCESS/SQL手册里没查到任何一个有关分页或分段的关键字。。。


[此贴被 邪・安(xiean) 在 08月24日00时25分 编辑过]

B10层 发表时间: 08/24 00:35

回复: xiean [xiean]   论坛用户   登录
回得好幸苦。。。都没人看。。。55555

B11层 发表时间: 08/26 01:36

回复: TomyXu [tomyxu]   论坛用户   登录
谁说没人看了!!我们开学了!所以不能常来!
谢谢你哦!!

B12层 发表时间: 09/06 19:53

论坛: 网站建设

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号