【发布时间】:2020-11-21 03:34:45
【问题描述】:
所以目前我已经创建了搜索文本字段来查找数据库特定列的关键字。
用这个雄辩的
$data = DB::table('product')
->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')
->join('product_per_category','product_per_category.product_id','=','product.id')
->where(['product.deleted' => 0])
->where(['product_per_category.deleted' => 0])
->where(['product_per_category.productcategory_id' => $id])
->where(function($query) use ($keyword){
$query->where('product.content', 'like', '%' . $keyword . '%')
->orWhere('product.title', 'like', '%' . $keyword . '%')
->orWhere('product.quantity', 'like', '%' . $keyword . '%')
->orWhere('product.price', 'like', '%' . $keyword . '%');
})
->groupBy('product.id')
->paginate(10);
如果我尝试搜索价格的234.00 值,所有与content, title, quantity, price, quantity 的列匹配的可能值都会自动返回数据。
如果我尝试搜索这样的关键字会怎样
234.00 Books 的值是 Price 和 Title。它现在不会返回任何数据。因为它只会匹配特定列上的这句话。
我想要做的是如果我搜索这样的东西
= 234.00 Books 20
*Value of Price, Title and Quantity
它应该返回每列匹配的所有数据。字母是小写还是大写只要匹配字母的位置即可
这可能吗?
** 更新 **
目标:只想匹配任何列上的234 值。成为结果。但我查询的问题是,如果我添加另一个关键字,如 234 Books,它不会返回任何数据
【问题讨论】:
-
可以通过正则表达式从字符串值提取到变量。或者不同的方法应该是用“”(空格)在php中分解字符串并为每个关键字在哪里循环。在您的方法中,将 234.00、Books、20 作为单独的值在该列中搜索。
-
问题将是您如何知道用户的意思是 234 是价格还是数量等。
-
只想匹配任何列上的 234 值。成为结果。但我的查询的问题是,如果我添加另一个关键字,如
234 Books它不会返回任何数据 -
okey,因此您需要以某种方式指定如何分隔输入的规则。如果您有这样的裁决,您可以执行下面发布的方法
-
你用的是什么mysql
engine?