【问题标题】:Using Wildcard Sql for searching a word in a TextField使用通配符 Sql 在 TextField 中搜索单词
【发布时间】:2015-04-11 07:37:00
【问题描述】:

为了更清楚,我有这个字段

 Columntobesearch
   aword1 bword1
   aword2 bword2
   aword3 bword4

现在我要做的是使用 sql 通配符进行搜索,所以我所做的就是这样

 %searchbox% 

我在搜索的两端都放置了通配符,但它搜索的只是该字段上的第一个单词

当我搜索“aword”时,所有字段都显示,但是当我搜索“bword”时,什么都没有显示,请帮忙。

这是我的完整代码

    $Input=Input::all();
    $makethis=Input::flash();
    $soptions=Input::get('soptions');
    $searchbox=Input::get('searchbox');
             $items = Gamefarm::where('roost_hen', '=',Input::get('sex'))
    ->where($soptions, 'LIKE','%' . $searchbox . '%')
    ->paginate(12);

【问题讨论】:

  • 你能分享代码吗,你是如何进行查询的?
  • 我编辑了我的问题,先生

标签: sql database laravel web wildcard


【解决方案1】:

如果你使用mysql,你可以试试这个:

<?php
  $q = Input::get('searchbox');
  $results = DB::table('table')
        ->whereRaw("MATCH(columntobesearch) AGAINST(? IN BOOLEAN MODE)",
            array($q)
        )->get();

当然,您需要为迁移文件中的全文搜索准备表格

DB::statement('ALTER TABLE table ADD FULLTEXT search(columntobesearch)');

无论如何,这不是进行 FTS 的更具可扩展性和效率的方式。 对于可扩展且可靠的全文搜索,我强烈建议您查看elasticsearch 并为此任务实施任何Laravel package

【讨论】:

  • 不错的答案先生,但我只是无法理解这部分“反对(?在布尔模式)”,布尔模式是什么意思?
  • 全文搜索可以参考mysql的文档在这个链接:dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
  • 我做了这个先生 $items = Gamefarm::where('roost_hen', '=',Input::get('sex')) ->whereRaw("MATCH(markings) AGAINST(?在布尔模式下)",array($searchbox)) ->paginate(6);但它仍然只返回第一个短语
  • 我建议你阅读 mysql 文档(在过去的消息中发布)在操作符部分,并尝试例如这样的过滤器: $q = str_replace(" ", " +",输入::get('searchbox'));
猜你喜欢
  • 2010-10-31
  • 2019-11-03
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
相关资源
最近更新 更多