$qstring = "SELECT titulo as value, id FROM blogs WHERE titulo LIKE '%".$term."%' LIMIT 5";
$qstring = "SELECT titulo as value, id FROM blogs WHERE MATCH(titulo) AGAINST ('.$term.') LIMIT 5";
第一个将返回结果,但与查询无关“
第二个将返回:
Can't find FULLTEXT index matching the column list
为什么?
答案 0 :(得分:0)
match()
仅适用于具有FULLTEXT的字段,正如错误消息所示。你必须这样做:
ALTER TABLE blogs ADD FULLTEXT INDEX tituolo_ft (titulo);
之前可以在字段上使用全文操作。
答案 1 :(得分:0)
正如错误消息所暗示的那样,除非您要比较的字段上有 FULLTEXT 索引,否则无法使用MATCH ... AGAINST
。
LIKE
语句应该可行。我认为问题可能是你的模式中的双引号是多余的,并且需要数据库值中的相应引号。请显示您要匹配的数据库数据。
答案 2 :(得分:0)
除了其他人提到的FULLTEXT索引之外,您似乎没有正确引用AGAINST子句中的文本。我认为应该是:
AGAINST ('".$term."')
否则,因为您的查询周围已经有双引号,只需嵌入变量:
AGAINST ('$term')
答案 3 :(得分:0)
检查$term
中的值,如果是FULLTEXT索引,则应该大于3,否则返回null
要编制索引的单词的最小和最大长度由ft_min_word_len
和ft_max_word_len
系统变量定义。默认最小值为四个字符。如果更改任一值,则必须重建FULLTEXT索引。例如,如果要搜索三个字符的单词,可以通过将以下行放在选项文件中来设置ft_min_word_len变量: