2011-10-21 62 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怀特,这是一个完整的代码示例。如果可能的话,你应该真的使用全文搜索,因为'%%'没有编入索引。 –