2015-02-23 2 views
0

Я использую CakePHP и не могу перевести этот SQL-запрос, который я сделал на верстаке. Это именно то, что я хочу сделать, но я не могу заставить его работать.Счетчик запросов базы данных CakePHP (случай когда)

Это мой запрос на MySQL:

select 
    docs.id, docs.schoolId, schools.name, docs.datesubmitted, docs.status, 
    uploads.iddocs, 
    COUNT(*), 
    COUNT(case uploads.staff_checked when 1 then 1 else null end) 
FROM 
    docs as docs, schools as schools, 
    uploads as uploads 
where 
    docs.schoolId = schools.schoolId AND 
    docs.id = uploads.iddocs AND 
    docs.status ="Submitted" 
group by 
    docs.id; 

Что мне нужно сделать, это объединить три таблицы: Docs, школы, загрузки.

двумя подсчетами: COUNT(case when) и COUNT(*) указывают количество рассмотренных документов (COUNT(case when)) и общие документы должны быть пересмотрены (COUNT(*)).

Пока что MySQL показывает, что мне нужно. Может кто-нибудь выяснить, как это сделать в Торт?

ответ

0

Попробуйте следующий запрос

$this->virtualFields = array(
    'count_case_uploads_staff_checked_when_1_then_1_else_null_end' => 'COUNT(case uploads.staff_checked when 1 then 1 else null end)', 
    'count' => 'COUNT(*)', 
); 
$options = array(
    'fields' => array(
     'Doc.id', 
     'Doc.schoolId', 
     'schools.name', 
     'Doc.datesubmitted', 
     'Doc.status', 
     'uploads.iddocs', 
     'Doc.count_case_uploads_staff_checked_when_1_then_1_else_null_end', 
     'Doc.count', 
    ), 
    'joins' => array(

     array(
     ), 
    ), 
    'conditions' => array(
     'Doc.schoolId = schools.schoolId', 
     'Doc.id = uploads.iddocs', 
     'Doc.status' => 'Submitted', 
    ), 
    'group' => array(
     'Doc.id', 
    ), 
); 
$data = $this->find('all', $options); 
Смежные вопросы