2015-04-16 5 views
0

Я работаю с codeigniter. Ниже мой кодПоказать все строки с group_by - Codeigniter

public function get_content(){ 
    $this->db->select('*'); 
     $this->db->from('content_table'); 
     $this->db->where('status', "Active"); 
     $this->db->group_by('MONTH(content_publish_date)'); 
     $query = $this->db->get(); 
     return $query->result(); 
} 

Я хочу, чтобы извлечь строки по месяцам & результат будет показан месяц мудрый .. Но в приведенном выше запросе я получаю только один ряд каждого месяца .. мне нужно все строки, чтобы показать результаты в месяц .. Пожалуйста, помогите.

Result needed

+0

Если у вас более одной строки в течение месяца, вам нужна одна строка? –

+0

будет несколько строк в таблице с разными месяцами. – SureshK

+0

В этом случае вы должны сделать 'order_by', чтобы увидеть ответы –

ответ

1

первым из всех ваших, где положение имеет дополнительные скобки в заявлении

$this->db->where('status'), "Active"); 

изменить его, как этот

вторых, добавьте свой заказ вместо группы, но заказ должен быть на месте

$this->db->order_by('DATE(content_publish_date)', 'DESC'); 

третьих получить месяц текущей записи в выберите в

$this->db->select('*,MONTH(content_publish_date) as content_publish_month'); 

означает, что ваш окончательный запрос будет

$this->db->select('*,MONTH(content_publish_date) as content_publish_month'); 
    $this->db->from('content_table'); 
    $this->db->where('status', "Active"); 
    $this->db->order_by('DATE(content_publish_date)', 'DESC'); 
    $query = $this->db->get(); 
    return $query->result_array(); 

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

$lastMonth = 0; 
foreach($result as $oneRec) 
{ 
    if(($lastMonth == 0) || ($lastMonth != $oneRec['content_publish_month']) 
    { 
     //show header 
     echo date('F Y', strtotime($row['content_publish_date'])); 
     //check if its first record or not 
     if($lastMonth != 0) 
     { 
      echo '</table>'; 
     } 
     //then add table start tag 
     echo = '<table><tr> 
     <th>Date</th> 
     <th>Title</th> 
     <th>Publication</th> 
    </tr>'; 
    } 
    //show record here 
    echo = '<tr> 
     <td>'.$oneRec['content_publish_date'].'</td> 
     <td>'.$oneRec['title'].'</td> 
     <td>'.$oneRec['publication'].'</td> 
    </tr>'; 
    //then set current record's month as last month as 
    $lastMonth = $oneRec['content_publish_month']; 
} 
echo '</table>'; 
+0

Спасибо .. но его также непросто отформатировать правильно .. – SureshK

+0

вы пробовали или нет? если вы попробуете, вы можете отправить мне снимок результата? –

+0

проверить отредактированный ответ на все ваше решение –

2

Вы должны использовать ORDER BY вместо GROUP BY

Делай так:

public function get_content(){ 
    $this->db->select('*'); 
     $this->db->from('content_table'); 
     $this->db->where('status', "Active"); 
     $this->db->order_by('MONTH(content_publish_date)', 'DESC'); 
     $query = $this->db->get(); 

     return $query->result_array(); 
} 

Написать этот код в файл вида:

$month = ""; 
foreach($paaed_arr AS $row){   

    $dbmonth = date('m', strtotime($row['content_publish_date']); 

    if($month != $dbmonth){ 

     echo date('F Y', strtotime($row['content_publish_date'])); 
     $month = $dbmonth; 
     } 
       // Put your code here to display records of this month .... 
} 

GROUP BY используется для grou ping те же данные, в то время как ORDER BY используется для сортировки данных

Позвоните мне!

+0

, но это будет непросто для форматирования. Я хочу показывать каждый месяц своими рядами отдельно. – SureshK

+0

Ok , Дайте мне документальное/графическое представление о том, как вам нужно показывать записи, поэтому я могу вам помочь. –

+0

Просто отредактировал вопрос вместе с требуемым результатом .. – SureshK

2

для достижения этой цели, вы должны заказать дату colmn .. попробовать это ...

public function get_content(){ 
     $this->db->select('*'); 
     $this->db->from('content_table'); 
     $this->db->where('status'), "Active"); 
     $this->db->order_by("MONTH(content_publish_date)", "asc"); 
     $query = $this->db->get(); 
     return $query->result(); 
} 
+0

Ваш ответ приведет к ошибке .. –

Смежные вопросы