2015-03-31 28 views
0

我有一個問題,我noob與cakePHP和我使用cakePHP 1.3,我有一個查詢很多subquerys,並嘗試將其轉換爲queryBuilder的蛋糕使用查找語句或這樣的事情:蛋糕php如何做一個好的查詢

我查詢了下一個:

 
SELECT 
    `PbFeedback`.`id`, 
    `PbFeedback`.`createdby`, 
    `PbFeedback`.`created`, 
    `PbFeedback`.`msg`, 
    `Usuario`.`name`, 
    `PbFeedback`.`tipo`, 
    COUNT(IF(PbFeedback.msg = 0, 1, 0))AS totalMsg, 
    `Entidad`.`nombre` 
    ,UltimoMensaje.* , #Subconsulta 
    MensajeNuevo.* #Subconsulta 
FROM 
    # A     A 
    `eon_feedback` AS `PbFeedback` 
    LEFT JOIN 
    # B      B 
    `eon_sys_usuarios` AS `Usuario` ON(`PbFeedback`.`createdby` = `Usuario`.`id`) 
LEFT JOIN `eon_entidades` AS `Entidad` ON(
    `PbFeedback`.`entidad_id` = `Entidad`.`id` 
) 
LEFT JOIN (SELECT 
    `F`.`createdby`, 
    `F`.`created`, 
    `F`.`msg`, 
    `F`.`tipo` 
FROM eon_feedback AS `F` 
GROUP BY `F`.`createdby` 
ORDER BY F.created DESC 
) AS UltimoMensaje ON (UltimoMensaje.createdby = `PbFeedback`.`createdby`) 
LEFT JOIN ( 
    SELECT 
    F.createdby AS usuario_id, 
    COUNT(*) AS `count` 
FROM 
    `eon_feedback` AS `F` 
WHERE `F`.`status` = 0 
GROUP BY F.createdby 
) AS MensajeNuevo ON MensajeNuevo.usuario_id = PbFeedback.createdby 
WHERE 
    `PbFeedback`.`usuario_id` = 0 
GROUP BY 
    `PbFeedback`.`createdby` 
ORDER BY 
    `PbFeedback`.`createdby` ASC 

LIMIT 0, 
30 ; 

感謝;)

回答

0

我建議你看看ContainableBehavior

http://book.cakephp.org/1.3/en/The-Manual/Core-Behaviors/Containable.html

中可容納讓您輕鬆構建複雜的查詢,例如:

$this->PbFeedback->find('all', array(
    'contain' => array (
     'Usuario', 
     'UltimoMensaje ', 
     'eon_feedback' => array (
      'fields' => array ('created','msg','tipo'), 
      'conditions' => array ('eon_feedback.status =' => '0') 
     ) 
    ), 
    'limit' => 30 
);