Функция COUNT в SQL подсчитывает целые данные в базе данных - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь подсчитать количество данных в базе данных в соответствии с идентификатором категории, и я написал следующие строки кода:

public function getPodcastByCategoryId($catId){
    $args = array(
        'fields' => array(
                    'podcast.id', 
                    'podcast.title',  
                    'podcast.description', 
                    'podcast.duration',
                    'podcast.audio',
                    'podcast.image',
                    'podcast.category',
                    'podcast.added_date',
                    'categories.title AS category_title',
                    '(SELECT users.full_name FROM users WHERE id = podcast.added_by) as author',
                    '(SELECT COUNT(category) FROM podcast WHERE category = podcast.category) as episodes'
                ),
        'join'   => "LEFT JOIN categories on podcast.category = categories.id",
        'where' => array(
            'category' => $catId
        ),
    );
    return $this->select($args);
}

Однако функция getPodcastByCategoryId($catId) дает эпизоды =3, который является количеством данных, присутствующих в подкасте таблицы.

Данные в базе данных :

data in database

Мои ожидаемые эпизоды: 2 в идентификаторе категории 2 и 1 в идентификаторе категории 1.

1 Ответ

0 голосов
/ 28 января 2019

для эпизода вы должны использовать COUNT (*)

$args = array(
      'fields' => array(
                  'podcast.id', 
                  'podcast.title',  
                  'podcast.description', 
                  'podcast.duration',
                  'podcast.audio',
                  'podcast.image',
                  'podcast.category',
                  'podcast.added_date',
                  'categories.title AS category_title',
                  '(SELECT users.full_name FROM users WHERE id = podcast.added_by) as author',
                  '(SELECT COUNT(*) FROM podcast WHERE categories.category = podcast.category) as episodes'
              ),
      'join'   => "LEFT JOIN categories on podcast.category = categories.id",
      'where' => array(
          'category' => $catId
      ),
  );
...