0
好吧,这是做我的灰色问题在我读过,并通过MySQL,并看了各种选项,我只能认为它是如此明显,我只是失明。全文mysql的搜索和匹配确切的字符串
总之,我做了一个标签云,过程的一部分是验证单词是否存在,如果有的话+1,但它必须是确切的短语。
所以我认为全文搜索是最好的选择。
举个例子。
$string = "hair dryer";
$string = '"'.$string.'"'; //enclose string in quotation marks to define must be an exact match
//$string = mysqli_real_escape_string($mysqli,$string); // removed to see if this was effecting the result.
$sql = "SELECT * FROM `search_keyword` WHERE Match (`keyword`) Against ('$string' IN BOOLEAN MODE) LIMIT 1";
$result=mysqli_query($mysqli,$sql);
所以测试是在DB我有词“吹风机”一条线,它匹配了 - 好的结果
如果我改变字符串但是“头发”它仍然翻出“吹风机”,它不应该做它不完全匹配。
我已经读完了所有的方法,我尝试这个我得到了错误的结果。
(
[0] => Array
(
[keyword] => hair dryer
[id] => 25
)
) /// should be empty and hair as a single row is not found
请任何的建议是欢迎:-)
那么为什么不''SELECT count(*)FROM ... WHERE Keyword = $ string'。如果你只想要一个特定的匹配。 – Mruf
是的,它可以使用该方法,但是由于某些原因,每隔一段时间它就无法拾取现有单词,并且在不应该添加另一个单词的情况下又添加了另一个单词。所以我认为,如果我使用全文,我会得到一个更准确的方法,而不是创建重复。我很困惑,为什么它看起来很难让查询只提取完全匹配。 –
如果我正确理解你的问题全文搜索不是正确的方向,因为全文创建倒排索引,即使你将限制字符限制为1,那么'头发'将匹配'吹风机'。 您需要像处理您的关键字之前处理您的关键字像修剪之前,strtolower然后使用以下查询SELECT count(*)FROM ... WHERE Keyword = trim($ string)或关键字字段上的组查询。 –