2011-10-21 110 views
0

我有一個PHP關鍵字搜索腳本,搜索MySQL數據庫,然後顯示結果。目前,該腳本基於附加到MySQL數據庫中的字段的單個關鍵字來查找結果。分配多個關鍵字到基於PHP/MySQL關鍵字的搜索

我的問題是; 如何將多個關鍵字附加到一個字段並在用戶查詢中匹配一個或多個關鍵字時返回結果?

我可以在我的數據庫中定義關鍵字並用逗號分隔它們嗎?例如這一點,會,會中的,現場

<?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 `keywords` LIKE '%{$query}%' LIMIT 1"; 
$searchResult=mysql_query($searchSQL); 

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

echo implode($results); 
} 

?> 

回答

2

要麼使用fulltext index,或關鍵字列表分成「的化合物中,其中像...或類似......或類似......」聲明:

$keywords = explode(' ', $_GET['q']); 
$likes = array() 
foreach($keywords as $kw) { 
    $kw = mysql_real_escape_string($kw); 
    $likes[] = "keywords LIKE '%{$kw}%'"; 
} 

$sql = "SELECT ... WHERE " . implode(' OR ', $likes); 

在關係數據庫中的一個字段中存儲的複合數據很少是個好主意,尤其是如果你要需要訪問整個領域的子部分。關鍵字應存儲在單獨的表中,每個記錄一個關鍵字。然後,您可以使用鏈接表將多個關鍵字與父表中的每條記錄相關聯。

+0

@Callum懷特,這是一個完整的代碼示例。如果可能的話,你應該真的使用全文搜索,因爲'%%'沒有編入索引。 –