2011-05-01 99 views
2

我已經搜索了類似的問題,回答並幫助我,但我找不到。所以,我的問題是,如何編寫MySQL查詢拉從數​​據庫,其中包含了另一個句子生成的關鍵字,像這樣的句子:Mysql查詢,選擇一個匹配關鍵字列表的句子

$tyrsena = "php statement for clause"; 
$ques = "SELECT * FROM question WHERE title IN '$tyrsena'"; 
$re = mysql_query($ques)or die(mysql_error()); 
while ($da = mysql_fetch_assoc($re)){  
     $sugg = $da['title']; 
     echo $sugg; 
} 

所以$tyrsena是從我需要生成的句子關鍵字,我想匹配question表中與這些關鍵字匹配的標題。
我提出的代碼不起作用,只有當它與100%相同時,它才與Sentece匹配,我只是想象我想實現的目標。謝謝你們:)

回答

6

首先,它聽起來像你需要你的桌子上創建一個 「FULLTEXT」 指標,並使用MATCH( )函數在你的查詢中。

待辦事項StackOverflow上搜索以下兩個標籤和細讀,涉及到這個問題和答案:

  • MySQL的
  • 全文搜索

而且你必須將源語句標記爲單詞列表,以便它適合插入到查詢中。天真的策略是在空格上分割,並且對於每個結果詞,刪除任何尾隨的標點並將其全部轉換爲小寫。 (例如,這保留「點」)。你也可以去掉任何「's」(撇號「s」)和「not」以及類似的常見縮略詞。 (一種較不天真的方法可以做到stemming

通常情況下,你也可以過濾掉任何「停用詞」(這些詞在英語句子中非常常見,在關鍵詞搜索中具有任何價值:of,a,an ,...,等,...,等等(你應該能夠通過簡單的網絡搜索很容易地找到兩三百個推薦英語stop words的列表)(有些被列在最下面的那個維基百科的文章

+0

Mysql爲全文搜索內置了停用詞列表,正如在ft_stopword_file中定義的那樣,短於ft_min_word_len的詞也被忽略。人們經常禁用這些設置,特別是對於諸如標題的短字符串,否則發現例如「讓它成爲」將是不可能的。 – piotrm 2011-05-01 19:04:53

+1

感謝您的回答,幫助了我很多,現在我正在調整全文搜索。謝謝 :) – hayllone 2011-05-01 19:37:47

1

嘗試用:

$tyrsena = "php statement for clause"; 
$tyrsena = explode(' ', $tyrsena); 
$tyrsena = implode("','", $tyrsena); 
$ques = "SELECT * FROM question WHERE title IN '$tyrsena'"; 

或更快:

$tyrsena = "php statement for clause"; 
$tyrsena = str_replace(" ", "','", $tyrsena); 
+0

當我運行這個查詢(第一種方式)時,它會帶來一個錯誤:'你的SQL語法有錯誤;查看與你的MySQL服務器版本相對應的手冊, php','statement','for','clause''in line 1' – hayllone 2011-05-01 18:55:44

+0

'$ ques'的輸出是什麼? – hsz 2011-05-01 18:58:37

+0

'$ re = mysql_query($ ques)或死(mysql_error()); while($ da = mysql_fetch_assoc($ re)){ $ sugg = $ da ['title']; echo $ sugg; }' – hayllone 2011-05-01 19:00:34