mysql REGEXP搜索产品名称

时间:2019-11-25 06:58:11

标签: php mysql regex laravel

我在表格产品中有字段pruduct_name product_name的记录是

  • 室内A1型消防栓箱65x52x15cm(不带玻璃和锁)
  • 室内A2型消防栓盒100x80x18cm(不带玻璃和锁)
  • 室内B型消火栓盒125x75x18cm(不带玻璃和锁)
  • C型消火栓箱95x66x20cm(不带玻璃和锁)
  • 室内C型消火栓盒95x66x20cm(不带玻璃和锁)

当我搜索“消防栓盒类型c”时,我想做的是 那么只会显示带有“ c型”的消防栓框。

我尝试过这些:

$prd_name= str_replace(' ','.+',$query);

$get_data = DB::table('product')->whereRaw('product_name regexp "'.$prd_name.'"')->select("product_name as name")->get();

但是结果还显示了另一种类型

2 个答案:

答案 0 :(得分:1)

使用此模式和关键世界类似:

$users = DB::table('product')
                ->where('name', 'like', '%Hydrant box%type c%')
                ->get();

此代码将搜索名称中带有“ T”的产品。尝试采用它。

这里有文档和更多示例:https://laravel.com/docs/5.8/queries#where-clauses

祝你好运!

答案 1 :(得分:0)

警告::此答案不涵盖Mysql REGEXP

这只是使用Mysql LIKE和PHP的解决方法

使用php explode按单词划分搜索参数,然后对每个单词使用where条件。

尝试下面给出的代码:

//get user input
$searchParam    = $request->get('search_field_name');
//split user input to words array
$searchParamArr = explode(" ", $searchParam);

$query = Product::query;
//loop through each word
foreach ($searchParamArr as $value) {
    //apply where condition with each word
    $query = $query->where("product_name", "LIKE", $value);
}

$get_data = $query->get();

这将根据您的示例数据进行。但是在以下情况下会出现问题:

您的数据:

  • 室内A1型消防栓盒

  • 消防栓A1 室内打字机

即使以上数据有所不同,但两者都有相同的用词。 如果您搜索Hydrant Box A1,代码将返回两行。

相关问题