我现在在做一个网上书店小项目,我想做一个类似于卓越网的图书搜索,就是只有一个文本框,我输入“电子工业”结果会出所有的“电子工业出版社”的书,而我在这个文本框输入“孙鑫”会出来所有的孙鑫的书籍,而如果我输入“孙鑫 电子工业” 也是能出我要的结果,我困惑的地方是:我在文本框中输入书籍名、作者、出版社等等都能搜索出结果,那在后台怎么用这些关键词去查询数据库的?不知道我表达的清楚否?我的权限只能给100分,如果有回答好的,我在再分。

解决方案 »

  1.   

    怎么判断这些关键词是出版社or作者or书名等,然后再执行相应的SQL语句。
      

  2.   

    个人认为:
    可以这样做!只可能所有的逻辑都包括!先从页面上获取文本框的内容!
    然后对其调用split()方法!等到数组:array如果长度等于1:只有一种组合:
    SQL:select * from book where press like '%"+array[0]+"%' or author like '"%+array[0]+%"' or name like '"+array[0]+"';
    如果等于2:6种组合!
    SQL:select * from book where press like '%"+array[0]+"%' and author like '%"+array[1]+"%'
        union all
        select * from book where press like '%"+array[1]+"%' and author like '%"+array[0]+"%'
        union all
        select * from book where press like '%"+array[0]+"%' and name like '%"+array[1]+"%'
        union all
        select * from book where press like '%"+array[1]+"%' and name like '%"+array[0]+"%'
        union all
        select * from book where author like '%"+array[0]+"%' and name like '%"+array[1]+"%'
        union all
        select * from book where author like '%"+array[1]+"%' and name like '%"+array[0]+"%'
    同理等于3:也是6种组合。
    不知道能不能满足你的要求! 
      

  3.   

    SQL 的 like 语句. 去搜寻数据库相同字段的 东西.
      

  4.   

    首先,建立图书数据库时,图书信息表应包含作者、出版社、名称、图书简介(包含以前三项)四个字段
    建议在前台页面上面放置一个选择框和一个信息框
    选择框内分按作者、按出版社、按书名以及模糊搜索
    另一信息框内填写关键词在后台接收到请求,如果是按作者或按出版社或名称,直接sql like关键字查找相应字段就行如果是模糊搜索,通过split("")方法按空格分隔关键字,如果使用jdbc,就是用立刻关键字查找简介字段,如果使用hibernate推荐使用hibernate search中的fullcontext进行全文关键字检索
      

  5.   

    这就是传说中的搜索引擎啊!GOOGLE就是啊!啊
    这技术不是一下两下就说的清楚的啊!
      

  6.   

    对于你这种情况用全文索引比较合适, 你可以把多个需要用来查询的字段组合起来建立一个全文索引, 然后直接用sql语句来进行全文搜索即可.每种数据库的全文搜索的sql语法都不相同,自己查阅相关资料,或者上网搜索一下就可以了.
      

  7.   

    如果不用全文索引, 我想楼主应该懂得link的用法, 楼主的难点是用空格分开的关键字不知道是属于哪个字段的, 比如 "孙鑫 电子工业” 程序不会知道 孙鑫 是作者,所以你必须每个字段都去找 "孙鑫" 关键字, 一旦关键字多起来,会产生很多组合,查询效率就会越来越慢. 
      

  8.   

    如果不用全文索引, 我想楼主应该懂得like的用法, 楼主的难点是用空格分开的关键字不知道是属于哪个字段的, 比如 "孙鑫 电子工业” 程序不会知道 孙鑫 是作者,所以你必须每个字段都去找 "孙鑫" 关键字, 一旦关键字多起来,会产生很多组合,查询效率就会越来越慢. 
      

  9.   

    split关键词,然后用or组合在每个字段上做检索
    不过,这样很慢用搜索引擎会快
      

  10.   

    数据量不大的话,用like就可以。
    有一个问题:如果有个出版社,孙鑫出版社
    输入孙鑫,
    结果:孙鑫的书籍和孙鑫出版社出版的书?
      

  11.   

    数据量不大的话,用like就可以。
    有一个问题:如果有个出版社,孙鑫出版社
    输入孙鑫,
    结果:孙鑫的书籍和孙鑫出版社出版的书?
      

  12.   

    先把你输入的内容分开来
    比如:“Java程序设计 孙鑫 电子工业” 分成:
    String bookname="Java程序设计";
    String writer="孙鑫";
    String publish="电子工业";然后
    select * from book where bookname like '%'+bookname+'%' and writer like '%'+writer+'%' and publish like '%'+publish+'%'
    如果没有的话默认为空,因为like %%满足所有情况
      

  13.   

    低效率的很简单,就在sql中用like % 模糊查询,但如果数据量大肯定很慢,尤其汉字,所以这个如果讲究效率或数据量大,至少要合理地建表,完善的索引