我的主页上有一个搜索栏,用户可以在其中输入信息,如果它与标签匹配,则会显示链接到该标签的服务(例如:搜索支持,它将显示指向IT支持页面的链接)< / p>
每个标记都存储在一个单独的单元格中的数据库中,该单元格具有链接到所选服务的唯一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。我一直试图让这个工作在过去的几天没有运气!任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
如果$ searchTerm中有多个单词,则必须拆分它们并为每个单词添加一个LIKE语句。
假设$ searchTerm中有“foo bar”, 你检查:WHERE标签喜欢“%foo bar%”,但没有标签“foo bar”。
你必须检查: WHERE(标签LIKE“%foo%”或标签LIKE“%bar%”)
答案 1 :(得分:0)
RightAnim = AnimationUtils.loadAnimation(Screen.this, R.anim.right_swipe);
ScreenAnimation.startAnimation(RightAnim );
与
一起$searchTermSplit = $searchTerm;
$pieces = explode(" ", $searchTermSplit);
$wordOne = $pieces[0];
$wordTwo = $pieces[1];
这似乎运作良好,谢谢大家:)