如何在同一个文本框中,实现对多个表的查询

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

23 个解决方案

#1


点击链接,把对应的查询类型和查询条件传过去就好了。

#2


但也只能传一个啦!我要查询多个表!比如像百度上--网页--知道--贴吧等等!文本框里怎么知道要查询哪个表呢?页面上是可以实现查询了,我也传过去了,但我要模糊查询!实现对收件人的查询?怎么做呢?

#3


把你那--网页--知道--贴吧的类型传到后台,不同类型调用不同实现类
或者直接在js中判断调用不同action方法

#4


百度的网页、新闻、贴吧都是不同的页面,每个页面都做自己的事,查询处理。你就多做几个页面,其他差不多,页面特性改一下。

#5


1、采用多个Action去操控,在js动态变化链接。
2、根据用户选中的类别去判断你所要查询表的标识。传到后台后,通过标识判断所要查询的表

#6


菜单上绑表的名称就OK了

#7


表是可以查询到了!如点击IP信息,IP信息字体就会变颜色!说明文本框里查询的是IP信息表!表格控件也一样,其他的也是的!现在问题是点击按钮,他出来整个表,而不是我要查询的结果!我要文本框里要查询表中的某个字段!比如我要到文本框里搜入:曼联!下面就会输出相对应表里有曼联这个字段相关联的结果!

#8


引用
表是可以查询到了!如点击IP信息,IP信息字体就会变颜色!说明文本框里查询的是IP信息表!表格控件也一样,其他的也是的!现在问题是点击按钮,他出来整个表,而不是我要查询的结果!我要文本框里要查询表中的某个字段!比如我要到文本框里搜入:曼联!下面就会输出相对应表里有曼联这个字段相关联的结果! 

输出的不是你想要的结果,而是整个表。这说明你的sql语句可能出现了问题!!

#9


改变一下思路,不要用一种请求处理所有的查询

不同的查询发不同的请求, 服务端用不同的Action处理(如果用的是struts2的话)

#10


后台查询如果在servlet中的话
可以判断输入的参数来动态拼接SQL语句

#11


我说下我的个人想法
就是你可以在下面放几个radio。比如新闻。网页。这个状态来判断执行那个表的查询点查询的时候获取这个radio的值然后拼接传到后台去查询就可以了。这样查询的时候也要考虑到你的js能力了。可以尝试一下。 

#12


获取前面标签的text值,然后根据这个text值条件查询不行么?比如收件人标签的ID设置为aa_1,后面跟着的文本框的ID设置为bb_1。

#13


1.百度是不同好几个网页做的分类 tieba.baidu.com  zhidao.baidu.com

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



#14


我觉得既然各自的表都可以查到,主要是里面的字段查不到,问题一:sql语句没写好,二:加标识符来判断文本框应用查询哪个!你们认为呢?

#15


我也用了几个网页,效果出来了,只是查询不到!

#16






引用 13 楼 kehan628 的回复:
1.百度是不同好几个网页做的分类 tieba.baidu.com  zhidao.baidu.com

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

我也用了几个网页,效果出来了,只是查询不到!下面我的sql语句:
String sql = "from Emailinfo hs where 1=1";
if (in != null) {
if (in.getEmail() != null && !in.getEmail().equals("")
|| in.getSubject() != null && !in.getSubject().equals("")
|| in.getSendermail() != null && !in.getEmail().equals("")
|| in.getEmailcontent() != null && !in.getEmailcontent().equals("")) {
sql += "and hs.email like '%" + in.getEmail() + "%'"
+ "and hs.subject like'%" + in.getSubject() + "%'"
+ "and hs.sendermail like'%" + in.getSendermail() + "%'"
+ "and hs.emailcontent like'%" + in.getEmailcontent() + "%'";
}
原理跟你差不多,只是可能性能不是很好!

#17


解释一下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() + "%'"
}
....

这样你运行下看看

#18


这个判断啊,在Action中就能实现,前段用js判断,别死脑筋,想办法记录是哪个文本框代表哪个条件就行,一个文本框对应一个隐藏域,隐藏域的值写对应的哪个表,显示出来的显示要查的字段条件值,把文本框和他对应的值都传过去了,这不就解决了....

#19


<input type="text" id="id" value="查询关键字"/>
<input type="hidden" id="id2" value="表明"/>
这两个是一组,就解决问题了,一起传到action中

#20


这就是后台拼写SQL的问题啊,保证参数都正确传到后台就可以了,多表联合查询

#21


引用 17 楼 kehan628 的回复:
解释一下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() + "%'"
}
....

这样你运行下看看



这样效果是跟那个一样的,我是为了方便所以才写的一起来的,刚开始我是写在一起!

#22


引用 19 楼 u011484382 的回复:
<input type="text" id="id" value="查询关键字"/>
<input type="hidden" id="id2" value="表明"/>
这两个是一组,就解决问题了,一起传到action中



我也搞了隐藏域,但貌似效果还是没成功!

#23


引用 18 楼 u011484382 的回复:
这个判断啊,在Action中就能实现,前段用js判断,别死脑筋,想办法记录是哪个文本框代表哪个条件就行,一个文本框对应一个隐藏域,隐藏域的值写对应的哪个表,显示出来的显示要查的字段条件值,把文本框和他对应的值都传过去了,这不就解决了....



我没有用struts,我只用了hibernate的hql查询,文本框可以判断我查询的哪个表,单没有实现里面对某个字段的查询!

#1


点击链接,把对应的查询类型和查询条件传过去就好了。

#2


但也只能传一个啦!我要查询多个表!比如像百度上--网页--知道--贴吧等等!文本框里怎么知道要查询哪个表呢?页面上是可以实现查询了,我也传过去了,但我要模糊查询!实现对收件人的查询?怎么做呢?

#3


把你那--网页--知道--贴吧的类型传到后台,不同类型调用不同实现类
或者直接在js中判断调用不同action方法

#4


百度的网页、新闻、贴吧都是不同的页面,每个页面都做自己的事,查询处理。你就多做几个页面,其他差不多,页面特性改一下。

#5


1、采用多个Action去操控,在js动态变化链接。
2、根据用户选中的类别去判断你所要查询表的标识。传到后台后,通过标识判断所要查询的表

#6


菜单上绑表的名称就OK了

#7


表是可以查询到了!如点击IP信息,IP信息字体就会变颜色!说明文本框里查询的是IP信息表!表格控件也一样,其他的也是的!现在问题是点击按钮,他出来整个表,而不是我要查询的结果!我要文本框里要查询表中的某个字段!比如我要到文本框里搜入:曼联!下面就会输出相对应表里有曼联这个字段相关联的结果!

#8


引用
表是可以查询到了!如点击IP信息,IP信息字体就会变颜色!说明文本框里查询的是IP信息表!表格控件也一样,其他的也是的!现在问题是点击按钮,他出来整个表,而不是我要查询的结果!我要文本框里要查询表中的某个字段!比如我要到文本框里搜入:曼联!下面就会输出相对应表里有曼联这个字段相关联的结果! 

输出的不是你想要的结果,而是整个表。这说明你的sql语句可能出现了问题!!

#9


改变一下思路,不要用一种请求处理所有的查询

不同的查询发不同的请求, 服务端用不同的Action处理(如果用的是struts2的话)

#10


后台查询如果在servlet中的话
可以判断输入的参数来动态拼接SQL语句

#11


我说下我的个人想法
就是你可以在下面放几个radio。比如新闻。网页。这个状态来判断执行那个表的查询点查询的时候获取这个radio的值然后拼接传到后台去查询就可以了。这样查询的时候也要考虑到你的js能力了。可以尝试一下。 

#12


获取前面标签的text值,然后根据这个text值条件查询不行么?比如收件人标签的ID设置为aa_1,后面跟着的文本框的ID设置为bb_1。

#13


1.百度是不同好几个网页做的分类 tieba.baidu.com  zhidao.baidu.com

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



#14


我觉得既然各自的表都可以查到,主要是里面的字段查不到,问题一:sql语句没写好,二:加标识符来判断文本框应用查询哪个!你们认为呢?

#15


我也用了几个网页,效果出来了,只是查询不到!

#16






引用 13 楼 kehan628 的回复:
1.百度是不同好几个网页做的分类 tieba.baidu.com  zhidao.baidu.com

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

我也用了几个网页,效果出来了,只是查询不到!下面我的sql语句:
String sql = "from Emailinfo hs where 1=1";
if (in != null) {
if (in.getEmail() != null && !in.getEmail().equals("")
|| in.getSubject() != null && !in.getSubject().equals("")
|| in.getSendermail() != null && !in.getEmail().equals("")
|| in.getEmailcontent() != null && !in.getEmailcontent().equals("")) {
sql += "and hs.email like '%" + in.getEmail() + "%'"
+ "and hs.subject like'%" + in.getSubject() + "%'"
+ "and hs.sendermail like'%" + in.getSendermail() + "%'"
+ "and hs.emailcontent like'%" + in.getEmailcontent() + "%'";
}
原理跟你差不多,只是可能性能不是很好!

#17


解释一下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() + "%'"
}
....

这样你运行下看看

#18


这个判断啊,在Action中就能实现,前段用js判断,别死脑筋,想办法记录是哪个文本框代表哪个条件就行,一个文本框对应一个隐藏域,隐藏域的值写对应的哪个表,显示出来的显示要查的字段条件值,把文本框和他对应的值都传过去了,这不就解决了....

#19


<input type="text" id="id" value="查询关键字"/>
<input type="hidden" id="id2" value="表明"/>
这两个是一组,就解决问题了,一起传到action中

#20


这就是后台拼写SQL的问题啊,保证参数都正确传到后台就可以了,多表联合查询

#21


引用 17 楼 kehan628 的回复:
解释一下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() + "%'"
}
....

这样你运行下看看



这样效果是跟那个一样的,我是为了方便所以才写的一起来的,刚开始我是写在一起!

#22


引用 19 楼 u011484382 的回复:
<input type="text" id="id" value="查询关键字"/>
<input type="hidden" id="id2" value="表明"/>
这两个是一组,就解决问题了,一起传到action中



我也搞了隐藏域,但貌似效果还是没成功!

#23


引用 18 楼 u011484382 的回复:
这个判断啊,在Action中就能实现,前段用js判断,别死脑筋,想办法记录是哪个文本框代表哪个条件就行,一个文本框对应一个隐藏域,隐藏域的值写对应的哪个表,显示出来的显示要查的字段条件值,把文本框和他对应的值都传过去了,这不就解决了....



我没有用struts,我只用了hibernate的hql查询,文本框可以判断我查询的哪个表,单没有实现里面对某个字段的查询!