搜索数据库多个单元格


Searching database multiple cells

我在我的主页上有一个搜索栏,用户可以在其中输入信息,如果它匹配一个标签,它将显示链接到该标签的服务(例如:搜索支持,它将显示到it支持页面的链接)

每个标签都存储在数据库中单独的单元格中,该单元格具有链接到所选服务的唯一id。在用户在同一搜索栏中输入两个标签而没有返回任何结果之前,这种方法非常有效。

$action = (isset($_POST['action'])) ? $_POST['action'] : '';
$searchTerm = (isset($_POST['search_term'])) ? $_POST['search_term'] : '';
if($searchTerm != "" && $action == "service-search"){
$query = $modx->newQuery('Service');
$query->select($modx->getSelectColumns('Service','Service','',array('id', 'subject', 'link', 'target')));
$query->leftJoin('ServiceTag', 'ServiceTag', 'Service.id = ServiceTag.service_id');
$query->leftJoin('Tag', 'Tag', 'Tag.tag_id = Tag.id');
$query->where(array(
    array(
        'OR:Tag.tag:LIKE' => '%' .$searchTerm. '%'
    ),
    array(
        'AND:Tag.published:=' => 1,
        'AND:Tag.deleted:=' => 0,
        'AND:Service.published:=' => 1,
        'AND:Service.deleted:=' => 0
    )
));
$query->sortby('Service.subject','ASC');
$query->limit(10);
$suggestions = $modx->getCollection('Service', $query);
if(count($suggestions) > 0){
    foreach($suggestions as $suggestion) {
        $listItems[] = array(
        "label"=>$suggestion->get('subject'),
        "link"=>$suggestion->get('link'),
        "target"=>$suggestion->get('target')
        );
    }
}else{
    $listItems[] = array(
    "label"=>"no results found",
    "link"=>"/services",
    "target"=>""
    );      
}
return json_encode($listItems);

}

我有这段PHP代码我相信它是

这行
'OR:Tag.tag:LIKE' => '%' .$searchTerm. '%'

需要修改,以处理多个$searchTerms。在过去的几天里,我一直试图让这个工作,但没有运气!

如果$searchTerm中有多个单词,则必须将它们分开并为每个单词添加LIKE语句。

假设$searchTerm中有"foo bar",你检查:WHERE标签像"%foo bar%",但没有标签"foo bar"。

你必须检查:WHERE (tag LIKE "%foo%"或tag LIKE "%bar%")

$searchTermSplit = $searchTerm;
$pieces = explode(" ", $searchTermSplit);
$wordOne = $pieces[0];
$wordTwo = $pieces[1];

'WHERE:Tag.tag:LIKE' => '%' .$searchTerm. '%',
'OR:Tag.tag:LIKE' => '%' .$wordOne. '%' .$wordTwo. '%'

这似乎工作得很好,谢谢大家:)