我有一个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);
}
?>
答案 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);
将复合数据存储在关系数据库中的单个字段中很少是个好主意,特别是如果您需要访问整个字段的子部分。关键字应存储在单独的表中,每个记录一个关键字。然后,您可以使用链接表将多个关键字与父表中的每个单独记录相关联。