加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

CakePHP使用%like%查找查询

发布时间:2020-12-13 22:37:22 所属栏目:PHP教程 来源:网络整理
导读:我有以下查找我的Cake PHP应用程序的查询: $this-paginate = array('limit'=5,'order'='Note.datetime DESC','conditions' = array( 'Note.status'=1,'OR' = array( 'Note.title LIKE' = '%'. $q . '%','Note.content LIKE' = '%'. $q . '%' ) )); 其中一个
我有以下查找我的Cake PHP应用程序的查询:
$this->paginate = array(
'limit'=>5,'order'=>'Note.datetime DESC','conditions' => array(
    'Note.status'=>1,'OR' => array(
        'Note.title LIKE' => '%'. $q . '%','Note.content LIKE' => '%'. $q . '%'
        )
    )
);

其中一个名为$q的参数就像对标题和内容的查询一样.

例如,如果我有以下内容:

标题:Lorem ipsum
内容:Lorem ipsum dolare

并寻找’lorem’

它会发现很好.但如果我搜索’lorem dolare’,它将找不到它.

我怎么做?

注意:我不想使用任何插件等.

编辑:如果我使用FULLTEXT这会工作吗?

$this->paginate = array(
'limit'=>5,'OR' => array(
        'MATCH(Note.title) AGAINST('.$q.' IN BOOLEAN MODE)','MATCH(Note.content) AGAINST('.$q.' IN BOOLEAN MODE)'
        )
    )
);

编辑2:

尝试以上操作时出现此错误:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dolor IN BOOLEAN MODE)) OR (MATCH(`Note`.`content`) AGAINST(lorem dolor IN BOOLE' at line 1

SQL Query: SELECT `Note`.`id`,`Note`.`title`,`Note`.`excerpt`,`Note`.`content`,`Note`.`datetime`,`Note`.`user_id`,`Note`.`slug`,`Note`.`status`,`Note`.`topic_id`,`User`.`id`,`User`.`email`,`User`.`firstname`,`User`.`lastname`,`User`.`password`,`User`.`status`,`Topic`.`id`,`Topic`.`title`,`Topic`.`slug` FROM `db52704_driz2013`.`notes` AS `Note` LEFT JOIN `db52704_driz2013`.`users` AS `User` ON (`Note`.`user_id` = `User`.`id`) LEFT JOIN `db52704_driz2013`.`topics` AS `Topic` ON (`Note`.`topic_id` = `Topic`.`id`) WHERE `Note`.`status` = 1 AND ((MATCH(`Note`.`title`) AGAINST(lorem dolor IN BOOLEAN MODE)) OR (MATCH(`Note`.`content`) AGAINST(lorem dolor IN BOOLEAN MODE))) ORDER BY `Note`.`datetime` DESC LIMIT 5
试试这个
$this->paginate = array(
    'limit'=>5,'conditions' => array(
        'Note.status'=>1,'OR' => array(
            "MATCH(Note.title) AGAINST('".$q."' IN BOOLEAN MODE)","MATCH(Note.content) AGAINST('".$q."' IN BOOLEAN MODE)"
        )
    )
);

换句话说,用引号括起搜索条件

编辑ndm的建议是有道理的

$this->paginate = array(
    'limit'=>5,'OR' => array(
            'MATCH(Note.title) AGAINST(? IN BOOLEAN MODE)' => $q,'MATCH(Note.content) AGAINST(? IN BOOLEAN MODE)' => $q
        )
    )
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读