CakePHP如何更有效地检索HABTM数据

时间:2017-05-04 14:03:58

标签: php mysql cakephp

我在CakePHP 2.x中有以下MySQL查询它可以工作但是它需要很长时间,如果我删除"加入"它工作得很快,但是' Tag.tags LIKE' => '%' $ busqueda'%'部分不会工作,任何想法如何使这更快地工作?更好的说:我如何删除连接,仍然可以在Tag表上搜索? 它是内部网上搜索引擎的一部分 提前谢谢

$year = $this->request->query['year'];
$years = "year(`Saliente`.`fecha_rem`) = ".$year;
$this->loadModel('Saliente');
                $this->Saliente->recursive = -1;
                $busqueda_c = mysql_escape_string($busqueda);
                $this->Saliente->bindModel(
                array('hasAndBelongsToMany' => array(
                        'Tag' => array(
                            'className' => 'Tag',
                            'jointable' => 'salientes_tags',
                            'foreignKey' => 'saliente_id',
                            'associationForeignKey' => 'tag_id'
                            )
                        )
                    )
                );
                $options = array('joins' => array(
                array('table' => 'salientes_tags',
                    'alias' => 'SalientesTag',
                    'type' => 'left',
                    'conditions' => array(
                        'Saliente.id = SalientesTag.saliente_id'
                    )
                ),
                array('table' => 'tags',
                    'alias' => 'Tag',
                    'type' => 'left',
                    'conditions' => array(
                        'SalientesTag.tag_id = Tag.id'
                    )
                )
                ), 'maxLimit' => 300, 'limit' => 10, 'contain' => array('Tag' => array('fields' => array('Tag.tags') )), 
                'fields' => array('Saliente.id', 'Saliente.usuario_id', 'Saliente.codigo', 'Saliente.asunto', 'Saliente.observacion', 
                'MATCH(Saliente.asunto, Saliente.observacion) AGAINST("+'.$busqueda_c.'*") AS relevance'), 'countField' => 'DISTINCT Saliente.id', 
                'conditions' => array($years, 'OR' => array("MATCH(Saliente.asunto, Saliente.observacion) AGAINST('+".$busqueda_c."*')", 
                'Saliente.codigo LIKE' => '%'.$busqueda.'%', 'Tag.tags LIKE' => '%'.$busqueda.'%' )), 
                'order' => 'relevance DESC, 
                fecha_rem DESC', 'group' => 'Saliente.id');

                $this->Paginator->settings = $options;
                $resultado = $this->Paginator->paginate('Saliente');
                $this->set('resultado', $resultado);

0 个答案:

没有答案