簡體   English   中英

cakephp復雜查詢

[英]cakephp complex queries

如何將SQL語句轉換為CakePHP代碼? 我能夠通過結果得到小組。 但是如何添加inner Select Count(*)語句?

我已更新“修訂”下的代碼但是,我收到此錯誤。 解析錯誤:語法錯誤,意外'INCOMPLETE'(T_STRING),期待')'。 我相信我會檢查我的開放和關閉括號。

下面的SQL語句

SELECT 
    `id` , 
    `mtpToken` , 
    `mtpCreator_id` , 
    `school_id` , 
    `user_id` , 
    `mtpStatus` , 
    `created` , 
    `modified` , 
    (
        (SELECT COUNT( * ) FROM mtpScreenings 
        WHERE (mtpStatus = 'INCOMPLETE' OR mtpStatus = 'HALFWAY') AND mtpToken = `mtpToken` )
    ) AS `mainStatus` 

    FROM `mtpScreenings` WHERE `mtpScreenings`.`school_id` = 15 GROUP BY `mtpToken`

CakePHP代碼如下

    $setting = $this->paginate = array(
        conditions' => array('MtpScreening.school_id' => 15),
        'recursive' => -1,
        'fields' => array('MtpScreening.field1'),
        'group' => array('MtpScreening.mtpToken'),
        'limit' => 1000
    );

修訂

    $setting = $this->paginate = array(
        conditions' => array('MtpScreening.school_id' => 15),
        'recursive' => -1,
        'fields' => array('SELECT COUNT(*) FROM mtpScreenings 
        WHERE (mtpStatus = "INCOMPLETE" OR mtpStatus = "HALFWAY") AND mtpToken = `mtpToken`
    ) AS mainStatus'),
        'group' => array('MtpScreening.mtpToken'),
        'limit' => 1000
    );

虛擬領域

虛擬字段的代碼示例:

public $virtualFields = array(
  'count' => "SELECT COUNT( * ) FROM MtpScreening 
    WHERE (MtpScreening.mtpStatus = 'INCOMPLETE' OR MtpScreening.mtpStatus = 'HALFWAY') AND MtpScreening.mtpToken = 'mtpToken'"    
   );

此代碼將生成虛擬字段:

$this->find('all', array(
               'fields'=>array(
                        'MtpScreening.id',
                        'MtpScreening.mtpToken', 
                        'MtpScreening.mtpCreator_id', 
                        'MtpScreening.school_id',
                        'MtpScreening.count'/*virtual field*/
                       )
                )
           );

分頁和虛擬字段

由於虛擬字段在執行查找時的行為與常規字段非常相似,因此Controller :: paginate()也可以按虛擬字段進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM