2011-10-11 130 views
0

我有一個搜索MySQL數據庫來回答問題的PHP搜索腳本。目前我的數據庫設置了這樣的...使用多個關鍵字觸發數據庫搜索結果

ID
問題 =什麼時候
答案 =的時間是12:00

然後,這些數據被髮送到我的PHP代碼:

<?php 

mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

if(!empty($_GET['q'])){ 
$query=mysql_real_escape_string(trim($_GET['q'])); 
$searchSQL="SELECT * FROM questions WHERE `question` LIKE '%{$query}%' LIMIT 1"; 
$searchResult=mysql_query($searchSQL); 

while($row=mysql_fetch_assoc($searchResult)){ 
$results="{$row['answer']}"; 
} 

echo $results; 
} 

?> 

當前,用戶查詢必須包含與問題字段完全相同的文本。我的問題是; 我怎樣才能使這項工作,所以它觸發了一定的幾個關鍵字?

我希望你能理解我的問題

+0

你可以給排序關鍵字的例子,你想匹配特定的問題嗎? – Clive

+0

我認爲那種自然語言處理將超出SO Q&A的範圍。 –

回答

1

我認爲,完整的測試搜索索引可以幫助 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html SOUNDEX功能,可在這方面有用的。 您可以分割查詢的關鍵字,並生成動態SQL,但它是無效的(性能問題SQL注入攻擊)看到http://php.net/manual/en/function.split.php

另一種方法是添加表QUESTION_KEYWORD(QUESTION_ID,關鍵詞),分割的問題和搜索這個表找到最好的QUESTION_ID ,但全文搜索索引更高效。實際上,全文搜索索引使用類似的數據結構來優化測試搜索。

0

爲便於速戰速決根據您的評論,你可以做這樣簡單的東西:

// Assuming query string is ?q=make,sponge,cake 
$searchSQL="SELECT * FROM questions WHERE "; 
$count = 0; 
foreach (explode(',', $_GET['q']) as $query) { 
    $searchSQL .= "`question` LIKE '%" .mysql_real_escape_string(trim($query)) . "%' "; 
    if ($count++ > 0) { 
    $searchSQL .= ' OR '; 
    } 
} 

$searchSQL .= ' LIMIT 1'; 
$searchResult = mysql_query($searchSQL); 
+0

你可以逆轉這個過程,也就是'q =如何製作一個海綿蛋糕',如果可以鬆動你的匹配(使用'OR'),那麼它就可以工作。如果你想要一個選擇性的AND,那麼恐怕它更像上面所說的自然語言處理 – Clive