【问题标题】:problem count rows on table in pagination?分页中表格上的行数问题?
【发布时间】:2011-10-26 21:09:04
【问题描述】:

我使用codeigniter

我在以下代码中遇到了rownum 的问题。就是这样,在表be counted from the beginningeach page of pagination 行中。对于示例,明确:

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); 
}

怎么样?

敬而远之

编辑和更多相关信息:

我不希望在分页的每一页中,从头开始计算行数。
下一页将计入每一个上一页。

看到这些图片:

我的看法:

   <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>    

【问题讨论】:

  • @Joseph Silber - 感谢您的回复,问题彼此不同。您的 cmets,长问题似乎放入 cmets?
  • 如果其他答案已解决,请单击问题旁边的复选标记接受我的答案。您仍然没有传入 $offset。看我的回答...
  • 您接受了一个问题的答案,但没有接受其他问题。 Stack Overflow 是专门设计的,以便其他搜索相同问题的人可以轻松找到答案。如果其他答案回答了您的问题,您也应该接受它们...
  • 考虑在每个线程中提出一个问题。如果一个问题取决于另一个问题,请按顺序进行。

标签: php codeigniter count pagination


【解决方案1】:

你有两个问题:

1) 你没有传入偏移量。

2) 你没有告诉分页类使用哪个 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 获取行号,但 MySQL 不支持 @rownum

但是,有一个解决方法(想法来自here)。将您的查询更改为:

$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");

【讨论】:

  • 对不起,我把我的旧代码,我更新帖子。我有一个新问题(在 rownum 中),解决方案是什么?
  • 您使用的是"ORDER BY id desc LIMIT $offset, 2");,还是"ORDER BY id desc LIMIT $offset, 4");?发帖前请校对!!!
  • 已执行。我该如何处理新问题(rownum)?
  • 我该怎么办?请帮帮我
  • @Joseph:我感觉到你的痛苦。你是一名士兵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2018-05-12
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多