CI3.x Active Record - Как связать запрос с псевдонимами полей - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь построить запрос, который работает:

         select
                year(created_timestamp) as year,
                month(created_timestamp)as month,
                MONTHNAME(created_timestamp) month_name,
                count(*) total_published
                From posts
                GROUP BY year, MONTH(created_timestamp), MONTHNAME(created_timestamp)
                ORDER BY year DESC, month DESC';

Теперь я пытаюсь построить вышеуказанный запрос, используя активную запись следующим образом:

    $this->db->simple_query('year(created_timestamp) as year, 
    month(created_timestamp) as month, monthname(created_timestamp) as monthname, 
    COUNT(*) post_count');

     $this->db->group_by('year');
     $this->db->group_by('monthname');
     $this->db->group_by('month');
     $this->db->order_by('year', 'desc');
     $this->db->order_by('month', 'desc');       
     $this->db->from('posts');
     $query = $this->db->get();

Ниже приведена ошибка, которую я получаю. Очевидно, он не знает псевдонимов. Как я могу заставить CI распознавать псевдонимы?

Unknown column 'year' in 'order clause'

SELECT * FROM `posts` GROUP BY `year`, `monthname`, `month` ORDER BY
 `year` DESC, `month` DESC

Некоторая отладочная работа привела к решению:

После большой отладки это решение:

 function blog_archive(){
    $this->db->select('year(created_timestamp) as year, month(created_timestamp) as month, monthname(created_timestamp) as monthname, COUNT(*) post_count');
    $this->db->from('posts');
    $this->db->group_by('year');
    $this->db->group_by('monthname');
    $this->db->group_by('month');
    $this->db->order_by('year', 'desc');
    $this->db->order_by('month', 'desc');
    $blog_archive = $this->db->get()->result_array();;
    return $blog_archive;
 }

1 Ответ

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

Решение:

 function blog_archive(){
    $this->db->select('year(created_timestamp) as year, month(created_timestamp) as month, monthname(created_timestamp) as monthname, COUNT(*) post_count');
    $this->db->from('posts');
    $this->db->group_by('year');
    $this->db->group_by('monthname');
    $this->db->group_by('month');
    $this->db->order_by('year', 'desc');
    $this->db->order_by('month', 'desc');
    $blog_archive = $this->db->get()->result_array();;
    return $blog_archive;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...