小女子求救:一个比较复杂的翻页程序如何写,忘各位xdjm们赐教!

AgathaZ 2004-09-13 11:13:47
采用的是mysql数据库,在一个搜索框内输入某一数据,要同时在三张表里进行查询
分别是a,b,c表,其中这三张表的结构不一样
所以只能取三个where,执行三个不同的查询表操作
问题是查询出来的数据要进行分页显示,三个表查询出来的记录不一样,要进行翻页
我的想法是,假如一页显示6条记录,a表有10条,b表有5条,c表有3条
就会有10+5+3=18条,共有三页
第一页是a表的1-6条;
第二页是b表的7-10条和b表的1-2条;
第三页是b表的3-5条和c表的1-3条

请问此翻页程序如何写,提供思路算法也行!
...全文
485 点赞 收藏 43
写回复
43 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wjwcsdn 2004-09-14
你可以分开取数据(也就是用三个select查询),然后分别输出显示三个结果集,这样的程序比较清晰;
三个查询语句互不影响,只要在页面输出上控制就行了

回复
来瞧瞧!
回复
tyonggang 2004-09-14
同意happyyct兄的回复,关健在sql语句,分页程序都是一样的
回复
toto2004 2004-09-14
问的问题这么多人回答下次我也注册个女的:)
回复
onizuka5211 2004-09-14
都是高手,学了一招

回复
AgathaZ 2004-09-14
to:wjwcsdn(翔)
什么意思?
回复
wjwcsdn 2004-09-14
<table>
<!--table a-->
<tr>
<td colspan="4">a1</td><td>a2</td><td>a3</td><td>a4</td><td>a5</td><td>a6</td>
</tr>
<%
for(int i=0;i<recNum;i++){
out.println("<tr><td>................</td></tr>");
}
%>
<!--table b-->
<tr>
<td colspan="2">b1</td><td>b2</td><td>b3</td><td>b4</td><td>b5</td><td>b6</td><td>b7</td>><td>b8</td>
</tr>
<%
for(int i=0;i<recNum;i++){
out.println("<tr><td>................</td></tr>");
}
%>
<!--table c-->
<tr>
<td>c1</td><td>c2</td><td>c3</td><td>c4</td><td>c5</td><td>c6</td><td>c7</td><td>c8</td><td>c9</td><td>c10</td>
</tr>
<%
for(int i=0;i<recNum;i++){
out.println("<tr><td>................</td></tr>");
}
%>

</table>
回复
AgathaZ 2004-09-14
to:happyct(绿叶对大树的情怀)
我知道怎么做了,谢谢!
回复
happyct 2004-09-14
在涉及数据库操作的任意程序中。最好是把数据库本身的工作给数据自己做,这样。程序的效率更有保证。当然,如果是数据库完成不了的工作,那另当别论。Mysql没有存储过程和函数等功能,否则,基本没有数据库做不了的数据处理工作。
回复
AgathaZ 2004-09-14
to:happyct(绿叶对大树的情怀)
的确降低效率,程序运行起来会很慢

那大哥,有什么好的方法?
回复
likev 2004-09-14
如果是已经出了三张表的查询结果,只是想在JSP页面能一页六条数据这样显示,可以用session记录查询的参数,在翻页时进行判断,session是否为空.
回复
happyct 2004-09-14
这好办啊。你可以补0啊。。
String sql = "select a1 as Co1,a4 as Co2,a6 as Co3,0 as Co4,0 as Co5 from a where 条件 Union select b2 as Co1,b3 as Co2,b4 as Co3,b5 as Co4,b6 as Co5 from b where 条件 Union select c1 as Co1,c2 as Co2,c9 as Co3,c10 as Co4,0 as Co5 from c where 条件";

(不知道有没笔误,或是语法错误,大概意思就是这样)
回复
xwj1003 2004-09-14
数据库没有设计好
回复
happyct 2004-09-14
不过,个人认为没有必要,降低程序效率
回复
happyct 2004-09-14
wjwcsdn(翔)的意思是:

Insert BigTable into values(select a1,a2 from a where 条件);
Insert BigTable into values(select b1,b2 from b where 条件);
Insert BigTable into values(select c1,c2 from c where 条件);
然后select * from BigTable
回复
AgathaZ 2004-09-14
to:happyct(绿叶对大树的情怀)
小女子我明白了,但问题是
举例说明:
表a字段: a1,a2,a3,a4,a5,a6
表b字段: b1,b2,b3,b4,b5,b6,b7,b8
表c字段: c1,c2,c3,c4,c5,c6,c7,c8,c9,c10
我要查询的是b表里的全部字段怎么办?a表少了两个字段怎么办?
回复
AgathaZ 2004-09-14
to:xishuichi(云龙)
我也想过用这种方法,但是字段不同一,有的表的字段少,而有的表的字段多,字段少的就不好as了!
回复
happyct 2004-09-14
举例说明:
表a字段: a1,a2,a3,a4,a5,a6
表b字段: b1,b2,b3,b4,b5,b6,b7,b8
表c字段: c1,c2,c3,c4,c5,c6,c7,c8,c9,c10

假设你现在需要查询a的a1,a4,a6,b的b2,b5,b8,c的c1,c2,c10
String sql = "select a1 as Co1,a4 as Co2,a6 as Co3 from a Union select b2 as Co1,b5 as Co2,b8 as Co3 from b Union select c1 as Co1,c2 as Co2,c10 as Co3 from c";

当你Execute后(也就是执行这个SQL并获得查询结果)。你不就可以拿来分页了??
由Union获取来的结果和Select * from TableName 获取的结果、对于分页没有两样!

请问“小女子”你明白了没有?
回复
AgathaZ 2004-09-14
to:gaochao79()
我也不想这么做的,但是郁闷的是开始没有说要做搜索,而且每个表都是独立完成实现自己的功能,功能不一样,表结构当然也不一样,老板想要他一查找就能把全网站的信息都查到,方便客户找信息。
你说我有什么办法,刚开始是两张表,现在又变成了三张,我怕以后又要弄出什么花招来!命苦!
回复
chianti_2019 2004-09-14
你可以比如把三张表用同个标识,连接并集起来
Select a_id as id * from a
UNION
select b_id as id * from b
UNION
select c_id as id * from c
这里的字段你可以自己表示,也可以自己有个标识是那张表的,有利于查询结果的方便.
我之前用个这个方法。。

回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-13 11:13
社区公告
暂无公告