2012-06-21 327 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