CakePHP 使用 %like% 和空格查找查询

问题描述 投票:0回答:1

我正在尝试根据类别 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;
}

我尝试了很多不同的选择:

  1. 用“喜欢”代替“喜欢”

  2. 使用 MATCH 的不同查询

    $sqlConditions = 数组( '或' => 数组( 'MATCH(Article.categories AGAINST(? IN BOOLEAN MODE)' => $cat, 'MATCH(Article.event_category_id) AGAINST(? IN BOOLEAN MODE)' => $cat ) );

  3. $sqlConditions = array('OR'=>array('Article.categories LIKE' => "%".$cat."%", 'Article.event_category_id' => $cat));

php mysql cakephp
1个回答
0
投票

我认为一个不错的解决方案是删除所有空格并使

$cat
的字符小写。

$likeCat = strtolower(str_replace(' ', '', trim($cat)));
$sqlConditions = array(
    'OR'=> array(
        'LOWER(REPLACE(Article.categories, ' ', ''))' => $likeCat,
        'Article.event_category_id' => $cat
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.