2012-06-21 76 views
1

问题:SQL搜索查询

我想在我的SQL搜索查询使用全文索引,但由于某种原因,它不从数据库返回的任何职位。

PHP/SQL代码:

$string = mysql_real_escape_string($_POST['searchtext']); 

$query = "SELECT 
      EID, 
      CONCAT (u1.Firstname, ' ', u1.Lastname) AS Examiner, 
      Supervisor, 
      ExaminationDate, 
      FirstAuthor, 
      SecondAuthor, 
      Level, 
      Credits, 
      Completed 
     FROM betyg_essays grade 
      INNER JOIN betyg_users u1 ON grade.Examiner = u1.UID 
     WHERE 
      MATCH (Supervisor, FirstAuthor, SecondAuthor) AGAINST ('$string') 
     ORDER BY 
      EID ASC 
"; 

MySQL表定义:

enter image description here

列数据库有两个职位:

enter image description here

场景:

如果我只搜索“每”它应该返回的第二个职位。

+0

你能提供该表的DDL?你是如何指定全文索引的? – acme

+0

以百分比符号围绕搜索词吗? –

+2

你现在很容易[sql注入](http://en.wikipedia.org/wiki/SQL_injection)!逃避你的输入,和/或开始使用PDO或Mysqli! – Bono

回答

0

假设您的全文索引定义是正确的(您应该发布您的表定义),MySQL在标准安装中只索引至少4个字母的单词。你必须通过设置ft_min_word_len改变,在my.cnf如果你想支持3个字母的词搜索范围:

[mysqld] 
ft_min_word_len=3 

此外,由于在MySQL documentation描述你应该检查阈值和停止字。

编辑:

根据您的table definition您正在使用的不支持全文索引,直到5.6.4的MySQL的InnoDB表。这是满的吗?我看不到你定义中定义的全文索引。

应该是这样的:

... FULLTEXT KEY `keywords` (`keywords`) ... 

要添加全文索引你的表使用ALTER TABLE语法:

ALTER TABLE betyg_essays ADD FULLTEXT(FIELD1, FIELD2, ...); 
+0

我试图寻找“斯文森”,但它给了我零结果。 – kexxcream

+0

你会推荐MyISAM吗?我不确定我是否定义了全文索引,有没有机会就这个问题得到任何建议? – kexxcream

+0

如果您的服务器安装位于MySQL 5.6.4以下,则必须使用MyISAM作为全文索引,没有选项(或使用像Sphinx这样的服务器搜索引擎)。我建议你看一下http://devzone.zend.com/26/using-mysql-full-text-searching/,它很好地描述了全文索引的使用。 – acme