【问题标题】:Assigning multiple keywords to PHP/MySQL keyword based search将多个关键字分配给基于 PHP/MySQL 关键字的搜索
【发布时间】:2011-10-21 16:52:01
【问题描述】:

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

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

我可以在我的数据库中定义关键字并用逗号分隔它们吗?例如this, would, be, in, the, 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);
}

?>

【问题讨论】:

    标签: php mysql html


    【解决方案1】:

    要么使用fulltext index,要么将关键字列表拆分为复合“where like ... or like ... or like ...”语句:

    $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);
    

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

    【讨论】:

    • @Callum Whyte,这是一个完整的代码示例。如果可能,您应该真正使用全文搜索,因为 %% 未编入索引。
    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2018-12-16
    • 1970-01-01
    • 2019-02-07
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多