【发布时间】:2016-11-29 12:39:07
【问题描述】:
在尝试找出使用用户输入的搜索字符串在 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%' OR Name1 LIKE '%f18%' OR Name2 LIKE '%f18%'
2) 虽然这很简单,但问题是在数据库中 f18 被列为 F-18...所以即使 %f18% 也找不到匹配的记录。我已经尝试将 Make、Name1 和 Name2 字段索引为 FULLTEXT 索引(我读过它会忽略字母数字字符),但是当我使用 LIKE %f18% 搜索应该返回两个F-18C 大黄蜂和 F-18E 超级大黄蜂匹配。是否可以使用 RegEx 来解决这个问题?我可以轻松地从用户输入的搜索中删除非字母数字字符,以防他们搜索 f-18 而不是 f18,但我必须将它们保存在数据库中。
所以问题是如何使用 mysqli 使用 LIKE 比较搜索多个字段并忽略用户输入搜索中的非字母数字字符?这甚至可能吗?
谢谢!
【问题讨论】:
-
如果您要去除非字母数字字符,那么
like或regex会起作用,我想。这种方法可能会产生与预期不同的结果。