2 回答
TA贡献1825条经验 获得超6个赞
用空格分割你的关键字,然后将它们内爆 %
//TODO query_one
//$query_one .= " AND (`title` LIKE ? OR `location` LIKE ?) ";
$stmt = $mysqli->prepare($query_one);
$keyWord = "%" . implode("%", explode(" ", $keyword)) . "%";
$stmt->bind_param("s", $keyWord));
$stmt->bind_param("s", $keyWord));
$stmt->execute();
请记住,准备好的语句是必须的并且易于切换到
笔记:
%在关键字开头使用会使优化器无法使用该列上的索引,如果存在的话,所以如果您的数据量很大并且您开始遇到性能问题,您可以去全文搜索(FTS ) 检查这个
不要担心 MySQL 上的区分大小写比较
关于 MySQL 将执行的比较案例,我将引用手册“字符串搜索中的大小写敏感性”
对于非二进制字符串(CHAR、VARCHAR、TEXT),字符串搜索使用比较操作数的排序规则。对于二进制字符串(BINARY、VARBINARY、BLOB),比较使用操作数中字节的数值;这意味着对于字母字符,比较将区分大小写。
..
默认字符集和排序规则是 utf8mb4 和 utf8mb4_0900_ai_ci,因此默认情况下非二进制字符串比较不区分大小写。
TA贡献1155条经验 获得超0个赞
这就是我最终解决这个问题的方式。
if (!empty($filter_data['keyword'])) {
$keyword = $filter_data['keyword'];
$keywordSearch = Wo_Secure(str_replace(',','',str_replace('-','',str_replace('.','',str_replace(' ', "", $keyword)))));
$keyword = Wo_Secure($keyword);
$query_one .= " AND (`title` LIKE '%{$keyword}%' OR REPLACE(REPLACE(REPLACE(REPLACE(`location`,' ',''),'-',''),'.',''),',','')LIKE '%{$keywordSearch}%') ";
}
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
