|
作者: 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号