首页 > 解决方案 > PHP MySQL LIKE 查询和标点符号

问题描述

我正在数据库中搜索学校名称。这里附近的一所学校名为 EO Green。我遇到的问题是,如果有人键入“EO Green”,他们自然会将学校列入结果列表。但是,如果有人键入“EO Green”,则不会显示,但应该显示。

这是查询:

SELECT DISTINCT name 
FROM donations 
WHERE name LIKE '%$query%' 
ORDER BY CASE WHEN name LIKE '$query%' THEN 1 
          WHEN name LIKE '%$query' THEN 3 
          ELSE 2 END 
LIMIT 8

有没有我只是忽略的解决方案?

这不是关于在 PHP 中去除标点符号的问题,而是关于在 MySQL 查询中忽略数据库中的标点符号的问题。

[编辑] 解决方案显然是对 MySQL Query 进行替换

WHERE REPLACE($field, '.', '') LIKE '%$query%'

然后还从用户输入中删除标点符号

$query = str_replace(".", "", $query);

它完成了我所追求的,但我仍然很好奇是否有更简单的方法。尽管我现在将其称为已解决,因为这可以完成工作。

标签: phpmysqlmysqli

解决方案


根据您使用的 MySQL 版本,您的问题的解决方案可能是使用全文搜索。

有一个自然语言解析器可以满足包含定界符(例如逗号、空格和句点)的搜索。确保检查您的 MySQL 版本,因为某些旧版本不支持 InnoDB 的全文搜索。


推荐阅读