我正在尝试根据类别ID或子类别名称查询页面。
变量$ cat将从我的数据库中获取一个整数或varchar。
我一直在使用带有sql的cakephp 1.3找到所有类别为$ cat或子类别LIKE $ cat的文章
效果很好但是当$ cat在单词之间留有空格时会出现问题,“Google表单”。
我浏览了这个网站并尝试了一些没有运气的方法。感谢任何建议。
这是我的控制器例程:
$cat = Sanitize::escape($cat);
$cat = trim($cat);
$title_a = str_replace($cat, "%".$cat."%", $cat);
$a_t = str_replace('"', $title_a, $title_a);
//var_dump($cat);
if(!empty($cat))
{
$sqlConditions = array('OR'=>array('Article.categories LIKE' => $a_t, 'Article.event_category_id' => $cat));
$sqlParams = array('conditions'=>$sqlConditions);
$catdata=$this->Article->find('all',$sqlParams);
return $catdata;
}
我尝试过很多不同的选择:
RLIKE而不是LIKE
使用MATCH的不同查询
$ sqlConditions = array( 'OR'=>阵列( 'MATCH(Article.categories AGAINST(?在BOOLEAN MODE中)'=> $ cat, 'MATCH(Article.event_category_id)反对(?在布尔模式中)'=> $猫 ) );
$ sqlConditions = array('OR'=> array('Article.categories LIKE'=>“%”。$ cat。“%”,'Article.event_category_id'=> $ cat) );
答案 0 :(得分:0)
我认为一个不错的解决方案是删除所有空格并使$cat
小写的字符。
$likeCat = strtolower(str_replace(' ', '', trim($cat)));
$sqlConditions = array(
'OR'=> array(
'LOWER(REPLACE(Article.categories, ' ', ''))' => $likeCat,
'Article.event_category_id' => $cat
)
);