проблема подсчета строк в таблице в нумерации страниц? - PullRequest
0 голосов
/ 14 августа 2011

Я использую codeigniter

У меня проблема с rownum в следующем коде.это то, что в each page of pagination строках в таблице be counted from the beginning.Для примера , ясно:

P1: Если мы на первой странице нумерации страниц , строки - это число:

1 Columns1
2 Columns2
3 Columns3
4 Columns4

P2: Если мы на второй странице нумерации страниц , количество строк:

1 Columns5
2 Columns6
3 Columns7
4 Columns8


P2: Я хочу сосчитать строку в таблице, (на второй странице нумерации страниц и ...):

5 Columns5
6 Columns6
7 Columns7
8 Columns8

P3: ... и более

Этот код:

$data['results'] = $this->db->query("SELECT @rownum:=@rownum+1 rownum, t.* ".
        "FROM (SELECT @rownum:=0) r, hotel_submits t ".
        "ORDER BY id desc LIMIT $offset, 4");

Полный код:

function show($offset = 0) 
    {
    $this->load->library('pagination');
        $config['base_url'] = base_url().'admin/accommodation/show';
        $config['uri_segment'] = 4;
        $config['total_rows'] = $this->db->count_all('hotel_submits');
        $config['per_page'] = '4';          

        $this->pagination->initialize($config);    
            $data['pagination'] = $this->pagination->create_links();                                        

        $offset = (int) $offset; // just to make sure nothing funky gets in here
        $data['results'] = $this->db->query("SELECT @rownum:=@rownum+1 rownum, t.* ".
            "FROM (SELECT @rownum:=0) r, hotel_submits t ".
            "ORDER BY id desc LIMIT $offset, 4");

            ////////////////////////                                

            $this->load->view('admin/accommodation_submit_show', $data); 
}

Как это?

С уважением

Редактирование и многое другое:

Я не хочу, чтобы на каждой странице нумерации страниц отсчитывались строки с начала.
Следующаястраница будет учитываться на каждой предыдущей странице.

см. эти изображения: enter image description here enter image description here enter image description here

мой взгляд:

   <div class="table_show">
    <table>
        <tr>
                <th><input type="checkbox" name="remember_me" value="true" ></th>
                <th>#</th>
                <th>نوع</th>
                <th>نام</th>
                <th>ستاره - نوع</th>
                <th>آدرس</th>
                <th>شماره تماس</th>
                <th>نمابر</th>
                <th>وب سایت</th>
                <th>ایمیل</th>
                <th>زمان ثبت</th>
        </tr>
    <?php
    //echo $this->table->generate($results);    
        foreach ($results->result() as $row)
        {
                echo    '<tr><td><input type="checkbox" name="remember_me" value="true" ></td>';
                echo    '<td>'.$row->rownum.'</td>';
                echo    '<td>'.$row->type.'</td>';
                echo    '<td>'.$row->name.'</td>';
                echo    '<td>'.$row->star.' - '.$row->type_star.'</td>';                                
                echo    '<td><span id="'.$row->address.'" class="tooltip">'.$row->address.'</span></td>';
                echo    '<td><span id="'.$row->number_phone.'" class="tooltip">'.$row->number_phone.'</span></td>';
                echo    '<td>'.$row->fax.'</td>';
                echo    '<td>'.$row->site.'</td>';
                echo    '<td>'.$row->email.'</td>';
                echo    '<td>'.$row->date.'</td></tr>';
            }
    ?>

    </table>
    <?= $pagination;?>
</div>    

1 Ответ

2 голосов
/ 14 августа 2011

У вас есть 2 проблемы:

1) Вы не передаете смещение.

2) Вы не сообщаете классу Pagination, какой сегмент URI использовать.

function show($offset = 0) // You need the offset
{
    // load pagination class
    $this->load->library('pagination');
    $config['base_url'] = base_url().'admin/accommodation/show';
    $config['total_rows'] = $this->db->count_all('hotel_submits');
    $config['per_page'] = '2';
    $config['uri_segment'] = 4; // You have to tell CI which URI segment to use

    $this->pagination->initialize($config);
    $data['pagination'] = $this->pagination->create_links();

    $offset = (int) $offset; // just to make sure nothing funky gets in here
    $data['results'] = $this->db->query("SELECT @rownum:=@rownum+1 rownum, t.* ".
    "FROM (SELECT @rownum:=0) r, hotel_submits t ".
    "ORDER BY id desc LIMIT $offset, 2");

    $this->load->view('admin/accommodation_submit_show', $data);   
}

РЕДАКТИРОВАТЬ:

Теперь, когда ваш код работает хорошо, мы можем решить вашу проблему (я предполагаю, что вы используете MySQL):

Вы пытаетесь использовать @rownum для получения номеров строк, но @rownum не поддерживается в MySQL.

Однако есть обходной путь (идея взята из здесь ).Измените ваш запрос на:

$data['results'] = $this->db->query("SELECT @rownum:=@rownum+1 rownum, t.*
    FROM (
        SELECT *
        FROM hotel_submits
        ORDER BY id desc
        LIMIT $offset, 2    
    ) t,
    (SELECT @rownum:=0) r");
...