我正在尝试根据类别 ID 或子类别名称查询页面。
变量 $cat 将从我的数据库中获取整数或 varchar。
我一直在使用 cakephp 1.3 和 sql 查找具有 $cat 类别或子类别(如 $cat)的所有文章
它工作得很好,但是当 $cat 在单词“google forms”之间有空格时就会出现问题。
我浏览了这个网站并尝试了多种方法,但没有成功。感谢任何建议。
这是我的控制器例程:
$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;
}
我尝试了很多不同的选择:
用“喜欢”代替“喜欢”
使用 MATCH 的不同查询
$sqlConditions = 数组( '或' => 数组( 'MATCH(Article.categories AGAINST(? IN BOOLEAN MODE)' => $cat, 'MATCH(Article.event_category_id) AGAINST(? IN BOOLEAN MODE)' => $cat ) );
$sqlConditions = array('OR'=>array('Article.categories LIKE' => "%".$cat."%", 'Article.event_category_id' => $cat));
我认为一个不错的解决方案是删除所有空格并使
$cat
的字符小写。
$likeCat = strtolower(str_replace(' ', '', trim($cat)));
$sqlConditions = array(
'OR'=> array(
'LOWER(REPLACE(Article.categories, ' ', ''))' => $likeCat,
'Article.event_category_id' => $cat
)
);