有一个问题试图找出在用户输入的搜索字符串中搜索mysql数据库(使用php)中的内容的正确方法...但我必须使用LIKE和%通配符并且还要比较用户搜索数据库字段,忽略任何非字母数字字符。它非常复杂,虽然我在StackOverflow上看到了关于这个主题的其他一些问题,但似乎没有一个答案可行。
例如,让我们说我有一个带有航空'的数据库。表格如下:
MAKE NAME1 NAME2
--------------------------------------------------------
Boeing B-17G Flying Fortress
Boeing F-18E Super Hornet
Lockheed F-16C Viper
Supermarine Spitfire Mk IX
McDonnellDouglas F-18C Hornet
现在我有一位用户搜索' f18 ' ...
1)因为我不知道这是飞机的制造商,名称1还是名称2加上我不知道用户是否输入了确切的类型(即f-18c / f18c与f18相比)我需要让用户输入搜索能够使用LIKE通配符搜索所有三个字段的%f18%。这是一个简单的 WHERE Make LIKE'%f18%'或名称1喜欢'%f18%'或名称2喜欢'%f18%'
2)虽然这很简单,但问题是在数据库中f18被列为F-18 ...所以即使%f18%也会找到没有匹配的记录。我已经尝试将Make,Name1和Name2字段索引为FULLTEXT索引(我读过它会忽略字母数字字符),但是当我使用LIKE%f18%搜索时,我似乎仍然没有返回记录F-18C大黄蜂和F-18E超级大黄蜂都有比赛。是否可以使用RegEx来解决这个问题?我可以轻松地从用户输入的搜索中删除非字母数字字符,以防它们搜索f-18而不是f18,但我必须将它们保存在数据库中。
所以问题是如何使用mysqli使用LIKE比较搜索多个字段并忽略用户输入的搜索中的非字母数字字符?这甚至可能吗?
谢谢!
答案 0 :(得分:1)
如果您确定不在搜索中添加alphanumeric
,则可以使用此query
这将为您提供所需的result
SELECT * from Aviation where replace(NAME1,'-','') like '%f18%'
尝试在phpmyadmin
中运行它。
了解有关replace()
的更多信息。请阅读此http://www.w3resource.com/mysql/string-functions/mysql-replace-function.php