将 mySQL 与字符串中的任何单词匹配
Match mySQL with any word in string
SELECT * FROM Restaurants WHERE Name LIKE '%{$_GET["searchval"]}%'
以上代码将 return Restaurants table 中名称字段包含搜索值的所有条目。
例如,如果 searchval 是 "Example Entry" 并且数据库中有一个名为 "Example Entry Number Five" 的条目,则会显示该条目。但是,如果条目是 "Example Number Five",则不会显示。
我怎样才能使如果数据库条目包含字符串中的任何一个单词,它就会显示出来。如果条目中包含 "Example" 或 "Entry",则 "Example Entry" 将显示。
最好的解决方案是全文索引。但是,您可以使用正则表达式来做您想做的事。
假设单词只被一个单词隔开,你可以这样做:
where name rlike replace({$_GET["searchval"]}, ' ', '|')
如果你真的想采用正则表达式的方式,我建议你在应用层做值解析。但是,假设单词由 space 分隔并且不使用特殊的正则表达式字符,这确实会在数据库中执行您想要的操作。
SELECT * FROM Restaurants WHERE Name LIKE '%{$_GET["searchval"]}%'
以上代码将 return Restaurants table 中名称字段包含搜索值的所有条目。
例如,如果 searchval 是 "Example Entry" 并且数据库中有一个名为 "Example Entry Number Five" 的条目,则会显示该条目。但是,如果条目是 "Example Number Five",则不会显示。
我怎样才能使如果数据库条目包含字符串中的任何一个单词,它就会显示出来。如果条目中包含 "Example" 或 "Entry",则 "Example Entry" 将显示。
最好的解决方案是全文索引。但是,您可以使用正则表达式来做您想做的事。
假设单词只被一个单词隔开,你可以这样做:
where name rlike replace({$_GET["searchval"]}, ' ', '|')
如果你真的想采用正则表达式的方式,我建议你在应用层做值解析。但是,假设单词由 space 分隔并且不使用特殊的正则表达式字符,这确实会在数据库中执行您想要的操作。