为PHP / MySQL关键字搜索分配多个关键字

时间:2011-10-21 16:52:02

标签: php mysql html

我有一个PHP关键字搜索脚本,用于搜索MySQL数据库,然后显示结果。目前,该脚本根据附加到MySQL数据库中字段的单个关键字查找结果。

我的问题是; 如何在一个字段中附加多个关键字,并在用户查询中匹配其中一个或多个关键字时返回结果?

我可以在数据库中定义关键字并用逗号分隔吗?例如 this,would,be,in,field

<?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);
}

?>

1 个答案:

答案 0 :(得分: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);

将复合数据存储在关系数据库中的单个字段中很少是个好主意,特别是如果您需要访问整个字段的子部分。关键字应存储在单独的表中,每个记录一个关键字。然后,您可以使用链接表将多个关键字与父表中的每个单独记录相关联。