我的表格有一行存储为D1234 HEX SCREW GS0090 O109
。目前我可以执行类似D1234 HEX
或SCREW GS0090
的操作,它将返回该行。但是,我希望能够以任意组合或任何顺序输入单词,例如D1234 GS0090
或HEX D1234
,并让它返回此行。如何才能做到这一点?
编辑:我正在使用Laravel 5.4,一个使用MyISAM引擎的mysql数据库
$products = DB::connection('it')
->table('it')
->join('units','units.code', '=', 's.code')
->join('vendors', 'vendors.code', '=', 's.code')
->where('s.deleted', '=', 0)
->where('vendors.deleted', '=', 0)
->where('s.description', 'LIKE', '%'.$term.'%')
->orWhere('s.vendorcode', 'LIKE', '%'.$term.'%' )
->orWhere('s.vendordefaultcode','LIKE', '%'.$term.'%')
->orWhere('vendors.partnumber', 'LIKE', '%'.$term.'%')
->orWhere('vendors.partvendorcode', 'LIKE', '%'.$term.'%')
->get());
答案 0 :(得分:0)
如果您使用的是mysql,我建议使用全文搜索。它主要用于高级搜索,但它可以很好地增强您的搜索。
首先,您需要为要使用全文搜索的每列添加fulltext
索引:
ALTER TABLE tablename ADD FULLTEXT(description);
接下来修改您的查询:
$products = DB::connection('it')
->table('it')
->join('units','units.code', '=', 's.code')
->join('vendors', 'vendors.code', '=', 's.code')
->where('s.deleted', '=', 0)
->where('vendors.deleted', '=', 0)
->whereRaw("MATCH (s.description) AGAINST ('{$term}*' IN BOOLEAN MODE)")
->orWhereRaw("MATCH (s.vendorcode) AGAINST ('{$term}*' IN BOOLEAN MODE)")
->orWhereRaw("MATCH (s.vendordefaultcode) AGAINST ('{$term}*' IN BOOLEAN MODE)")
->orWhereRaw("MATCH (vendors.partnumber) AGAINST ('{$term}*' IN BOOLEAN MODE)")
->orWhereRaw("MATCH (vendors.partvendorcode) AGAINST ('{$term}*' IN BOOLEAN MODE)")
->get());
一些帮助
的链接