2012-09-01 3 views
0

У меня возникли проблемы с отображением правильных чисел счета (поля). Я пытаюсь группировать по полю и хочу вернуть порядок по группам и подсчитать их.группа по и счет не учитывается в codeigniter

контроллер

$this->load->library('pagination'); 

    $query = "SELECT usercode,count(usercode) AS co FROM tabs 
    GROUP BY usercode ORDER BY co desc"; 

    $config['total_rows'] = $this->db->query($query)->num_rows(); 
    $config['num_links'] = '25'; 
    $config['uri_segment'] = 3; 
    $config['base_url'] = base_url() . "/user/topCreators/"; 
    $config['per_page'] = '25'; 
    $config['anchor_class'] = " class=\"number\" "; 
    $config['cur_tag_open'] = "<a href=\"#\" class=\"number 
    current\" title=\"Current Page\">"; 
    $config['cur_tag_close'] = "</a>"; 

    $this->pagination->initialize($config); 
    if ($this->uri->segment(3) == FALSE){ 
     $offset = 0; 
    } 
    else 
    { 
     $offset = $this->uri->segment(4); 
    } 

    $limit = $config['per_page']; 
    $data["total_records"] = $config['total_rows']; 
    $data["page_links"] = $config["per_page"]; 


    $data["query"] = $this->db->query($query . " LIMIT $limit OFFSET $offset"); 

    $this->load->view("top_creators", $data); 

мой взгляд файл

<?php foreach($query->result() as $me) {?> 
    <?= $me->co?> 

    <?php }?> 
+0

Я ввел разрыв строки, чтобы отобразить колодец sql в stackoverflow. – user1494854

ответ

1

co будет тот же номер для каждого результата, так как вы делаете подсчет всех usercodes в закладках таблицы, поэтому ваш заказ не будет работать. Он также делает излишним выполнение $this->db->query($query)->num_rows();, потому что это то же значение, что и co

+0

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

+0

его просто подсчет немногих записей больше, чем оригинал – user1494854

+0

любое решение есть? – user1494854

0

Необходимо более подробно объяснить, что не работает в вашем случае.


Лучшая практика при работе с пагинацией на мой взгляд, заключается в использовании SQL_CALC_FOUND_ROWS.

Основном это позволяет запускать один запрос и получать количество полных строк через

// Main query with SQL_CALC_FOUND_ROWS 

$row = $this->db->query("SELECT FOUND_ROWS() AS found")->row(); 
$config['total_rows'] = $row->found; 

The SQL_CALC_FOUND_ROWS подсчетов все строки, но возвращает только те, в LIMIT. Это позволяет делать меньше запросов к вашей системе (меньше лаг) и будет всегда дать правильные total_rows, так как вы получите значения из того же запроса.

+0

его не возвращает значения $ row-> co справедливо, например, он просто возвращает 127, который должен быть 19. Его не очень хорошо вычисляют. – user1494854

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