日期:2014-05-17  浏览次数:20774 次

如何在同一个文本框中,实现对多个表的查询
   我想做一个像百度一样:如点击网页,就查询“网页”这一个表。点击新闻,就查“新闻”这一个表。(注:在这里我把网页和新闻各看成各的单独的表)!现在我把页面做完了,后台的查询也写完了,点击那个如百度样的文本框旁的按钮也可以实现下面对表的查询,但是它实现的是查询整个表,不是表中的某个字段,比如我想查邮件表中的收件人,他就查询不出来,出来的是整个数据!我碰到的问题是,我怎么知道那个文本框里查询的哪个表的哪个字段呢?不说多了,上个图吧!有图有真相,才清晰!
java 难题 解答 谢谢

------解决方案--------------------
把你那--网页--知道--贴吧的类型传到后台,不同类型调用不同实现类
或者直接在js中判断调用不同action方法
------解决方案--------------------
1、采用多个Action去操控,在js动态变化链接。
2、根据用户选中的类别去判断你所要查询表的标识。传到后台后,通过标识判断所要查询的表
------解决方案--------------------
改变一下思路,不要用一种请求处理所有的查询

不同的查询发不同的请求, 服务端用不同的Action处理(如果用的是struts2的话)
------解决方案--------------------
后台查询如果在servlet中的话
可以判断输入的参数来动态拼接SQL语句
------解决方案--------------------
我说下我的个人想法
就是你可以在下面放几个radio。比如新闻。网页。这个状态来判断执行那个表的查询点查询的时候获取这个radio的值然后拼接传到后台去查询就可以了。这样查询的时候也要考虑到你的js能力了。可以尝试一下。 
------解决方案--------------------
1.百度是不同好几个网页做的分类 tieba.baidu.com  zhidao.baidu.com

2.字段的问题用 from biao where fajianren like '%?%' or shoujianren like '%?%'
or biaoti like '%?%'




------解决方案--------------------
解释一下16楼的
如果 getEmail 不为空,其余全空,那么
sql="*** and email like '%***%' and subject like '%%' and sendermail like '%%' ****"
这样的话,我没运行过,反正感觉是不顺服

应该分开来写:
if (in.getEmail() != null && !in.getEmail().equals("")){
sql += "and hs.email like '%" + in.getEmail() + "%'"
}
if(in.getSubject() != null && !in.getSubject().equals("")){
sql += "and hs.subject like'%" + in.getSubject() + "%'"
}
....

这样你运行下看看
------解决方案--------------------
这个判断啊,在Action中就能实现,前段用js判断,别死脑筋,想办法记录是哪个文本框代表哪个条件就行,一个文本框对应一个隐藏域,隐藏域的值写对应的哪个表,显示出来的显示要查的字段条件值,把文本框和他对应的值都传过去了,这不就解决了....
------解决方案--------------------
<input type="text" id="id" value="查询关键字"/>
<input type="hidden" id="id2" value="表明"/>
这两个是一组,就解决问题了,一起传到action中
------解决方案--------------------
这就是后台拼写SQL的问题啊,保证参数都正确传到后台就可以了,多表联合查询