我用SQL2000+JBulider编写一个JSP分页;
JSP只显示,分页在数据库中实现.
开始的时候是用的方法太搞笑了,就是每次TOP行数,然后在rs.next中一个判断取出所要的部分。但是要是数据上万行就太不合理了.......~T_T~
我在网上找了一些方法,方法1.(ID大、小于和 SELECT TOP) 方法2.(NOT IN 和SELECT TOP) 方法3.(用游标存储过程实现)
首先说明:我现在不会用第3中方法.
我现在谈一下自己的理解和想法.
我的分页是在3个表联接查询后进行的。比如表A,B,C,当然也可以假设为2个表。
A表和B表是‘多对一’关系(即A表的外键是B表的主键)。B表中的'主键'可以在A表中'有'或'无'.当他们进行左连接查询的时候(A left outer join B),可能出现为'NULL'的字段.
这样用方法一就不好判断了。
我在用方法2的时候,在后面条件上我加了句 'or A.ID is null'.开始觉得还好,但是当‘NULL’字段的行数多的时候,问题就来了。至于显示多少行和多少页这些还是能判断的(行,页的判断是另一个方法)。就是在传到JSP页面的时候,随着'NULL'字段行数的增加,显示也就出问题了。(比如:一共10页,含有'NULL'字段行是从第5页开始的,后面的全为'NULL'字段行,前面的几页没问题。不管怎么选‘下一页’,还是点击跳转到(大于5的)页面,JSP页面总显示在第5页,后面的就不显示了)。
我的语句是这样些的“select top 页数*行数 a.id,a.name,b.name,b.id from a Right Outer JOIN b on a.b_id=b.id where( a.id NOT IN (SELECT TOP (页数-1)*行数 a1.id FROM a Right Outer JOIN a on a1.owner_id=b1.id ) or a.id is null)”.
我用的是3个表,第3张表只是内联接了A表中的A.ID,这里我只把2个主要的表中主要字段给写上.我想语法错误应该没有,就是 TOP,NOT IN 这种结构下来的。于是出现了上面我说的情况,后来我又想改一下,改的头都大了也没实现。
我就是想如何把含'NULL'的字段行给一页一页的显示,因为:如果没有'NULL'字段的话就比较好弄了。
也许我这种办法根本就是不合理或着是我一直在钻死角,毕竟一个人的想法太狭隘了,在这里把自己的想法跟大家说下,那位大侠给解决一下啊,谢谢~~,非常感谢!!!。
大家有什么好的方法可发到[email protected],最好给个比较完整的代码,毕竟本人菜~!
我现在就想了这么多,还有什么要求的话,我再修改。
帐号注册了也没用,分就是注册时候给的,如果大家不介意,先欠着大家的。
再次感谢!!!
JSP只显示,分页在数据库中实现.
开始的时候是用的方法太搞笑了,就是每次TOP行数,然后在rs.next中一个判断取出所要的部分。但是要是数据上万行就太不合理了.......~T_T~
我在网上找了一些方法,方法1.(ID大、小于和 SELECT TOP) 方法2.(NOT IN 和SELECT TOP) 方法3.(用游标存储过程实现)
首先说明:我现在不会用第3中方法.
我现在谈一下自己的理解和想法.
我的分页是在3个表联接查询后进行的。比如表A,B,C,当然也可以假设为2个表。
A表和B表是‘多对一’关系(即A表的外键是B表的主键)。B表中的'主键'可以在A表中'有'或'无'.当他们进行左连接查询的时候(A left outer join B),可能出现为'NULL'的字段.
这样用方法一就不好判断了。
我在用方法2的时候,在后面条件上我加了句 'or A.ID is null'.开始觉得还好,但是当‘NULL’字段的行数多的时候,问题就来了。至于显示多少行和多少页这些还是能判断的(行,页的判断是另一个方法)。就是在传到JSP页面的时候,随着'NULL'字段行数的增加,显示也就出问题了。(比如:一共10页,含有'NULL'字段行是从第5页开始的,后面的全为'NULL'字段行,前面的几页没问题。不管怎么选‘下一页’,还是点击跳转到(大于5的)页面,JSP页面总显示在第5页,后面的就不显示了)。
我的语句是这样些的“select top 页数*行数 a.id,a.name,b.name,b.id from a Right Outer JOIN b on a.b_id=b.id where( a.id NOT IN (SELECT TOP (页数-1)*行数 a1.id FROM a Right Outer JOIN a on a1.owner_id=b1.id ) or a.id is null)”.
我用的是3个表,第3张表只是内联接了A表中的A.ID,这里我只把2个主要的表中主要字段给写上.我想语法错误应该没有,就是 TOP,NOT IN 这种结构下来的。于是出现了上面我说的情况,后来我又想改一下,改的头都大了也没实现。
我就是想如何把含'NULL'的字段行给一页一页的显示,因为:如果没有'NULL'字段的话就比较好弄了。
也许我这种办法根本就是不合理或着是我一直在钻死角,毕竟一个人的想法太狭隘了,在这里把自己的想法跟大家说下,那位大侠给解决一下啊,谢谢~~,非常感谢!!!。
大家有什么好的方法可发到[email protected],最好给个比较完整的代码,毕竟本人菜~!
我现在就想了这么多,还有什么要求的话,我再修改。
帐号注册了也没用,分就是注册时候给的,如果大家不介意,先欠着大家的。
再次感谢!!!
这个我也不懂啊,有没有纯写SQL的,用来实现我的要求的~~
谢谢~~~
谢谢上面说的方法,高级的我现在不会.
就想用SQL语句来分,
还有就是按我的那种想法去分