Cakephp вычисление средней задачи - PullRequest
1 голос
/ 20 мая 2011

У меня есть этот запрос:

   $this->set('grades', $this->Grade->Query("
SELECT AVG(grade), 
sections.section_name 

FROM grades, 
sections 

WHERE sections.id = grades.section_id 

AND grades.user_id =".$id." 

GROUP BY grades.section_id"));

И я использую это для вывода данных:

<?php foreach($grades as $grade): ?>
    <tr>
        <td><?php echo $grade['Grade']['AVG(grade)']; ?></td>
    </tr>
<?php endforeach;?>

Но это дает мне "индекс предупреждения Оценка не найдена". Я подозреваю, что это связано с ['AVG(grade)'], потому что, когда я удаляю AVG (оценку), он выводит нормально (без значений avg, очевидно)

Кто-нибудь может помочь?

EDIT

debug($grades) outputs:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [avg_grade] => 4.75000
                )

            [sections] => Array
                (
                    [section_name] => Nederlands
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [avg_grade] => 6.50000
                )

            [sections] => Array
                (
                    [section_name] => Engels
                )

        )

)

Ответы [ 3 ]

6 голосов
/ 20 мая 2011

Сначала выполните debug( $grades ), чтобы увидеть, где в структуре массива хранится среднее значение. Вы также можете назвать это как-нибудь еще в запросе, например SELECT AVG( grade ) AS average.

Как примечание: вам не нужно использовать необработанный запрос (возможно, вопрос предпочтений, но я стараюсь избегать их, если это вообще возможно). Вы можете сделать

$this->Grade->find(
  'all',
  array(
    'conditions' => array(
      'Grade.user_id' => $id
    ),
    'recursive' => 1,
    'fields'    => array( 
      'AVG( Grade.grade ) AS average',
      // +whatever else you need
    )
    'group' => 'Grade.section_id'
  )
);

В этом случае, когда вы делаете foreach( $grades as $grade ), средние значения будут в $grade[0]['average'].

0 голосов
/ 07 марта 2018

Ниже Query работает для меня в CakePHP 3,5

// пользователи моей таблицы
// По умолчанию рейтинг пользователей в таблицах будет равен 0, поэтому задайте условие where> 0

$query = $this->Users->find();

$ratingAverage = $query->select(['averageRating' => $query->func()->avg('user_rating')])
->where(['user_rating' => $userId,'provider_rating >' => 0])->group('user_rating')->first();

См. Здесь

0 голосов
/ 20 мая 2011

Do SELECT AVG(grade) AS avg_grade это будет доступно как
$grades['Grade']['avg_grade'].

...