利用标准的 SQL 语句实现查询记录分页
在绝大多数的应用中,返回大量的符合条件的记录是司空见惯的,最典型 的莫过于搜索
了。在搜索的应用中,用户给出搜索条件,服务器查出符合条件的记录。但往往搜索会返
回大量的数据记录,如果在网页中,往往是通过分页的方式来 实现,页面提供诸如上一页
下一页等等按钮来实现分页。
现在主要有以下几中方式来实现分页:
1.EJB 的 Find 方法
2.在显示第一页前将所有的记录放在 collection 对象中,后续的各页都在内存中取。
3.每一页都到数据库作一次重复的查询,然后将符合条件的记录显示出来。
4.保存前几页的搜索结果在内存中(经常使用到的),后续的记录(这些数据是多数用户
都没有耐心看的)再通过连数据库取得。
5.其他各种 cache 机制。
我 们可以根据实际情况来选择适合自己的方法,我给大家介绍一个通过标准的 SQL 语句
来得到符合条件的数据。如从第 10 到 20 条的符合条件(where 语句中 的)的记录。通
过这种方法取得记录有一个必要条件,必须有一个能够标识记录顺序的字段,如 id,time
等等。下面我为大家演示一个例子:
查询 t_table 表中所有记录第 10 到 20 条,按 id 排序。
SQL 语句为:
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE
t2.id < t1.id ) > = 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id <
t1.id ) < 20
又如查询 t_table 表中 key='123'第 10 到 20 条的记录,按 id 排序。
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE
t2.id < t1.id AND t2.key = '123') > = 10 AND (SELECT count(*) FROM t_table
t2 WHERE t2.id < t1.id AND t2.key = '123') < 20 AND t1.key = '123'
当然条件中的 id 可以换为任何能表识记录顺序的字段。