匹配(行)对('text')不会返回结果

时间:2012-01-29 02:03:19

标签: mysql

$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

为什么?

4 个答案:

答案 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_lenft_max_word_len系统变量定义。默认最小值为四个字符。如果更改任一值,则必须重建FULLTEXT索引。例如,如果要搜索三个字符的单词,可以通过将以下行放在选项文件中来设置ft_min_word_len变量:

相关问题