【问题标题】:Issue with CI MSSQL connection and the Paginator classCI MSSQL 连接和 Paginator 类的问题
【发布时间】:2014-03-12 12:41:28
【问题描述】:

我似乎在 codeigniter 和我的搜索查询中遇到了分页问题。

代码

public function index($page = 0){
    $this->db->select('a.UserID, a.Username, a.UserFullName, a.UserJoined, 
                      (Select Top 1 p.phoneNumber From vwSelectUserPhone p Where p.userID = a.userID) As PhoneNumber, 
                      (Select Top 1 e1.emailAddress From vwSelectUserEmail e1 Where e1.userID = a.userID) As EmailAddress,
                      (Select Top 1 c1.shipCompany From vwSelectOrderAddresses c1 Where c1.userID = a.userID) As UserCompany');
    //$this->db->order_by('UserJoined', 'DESC')
    $this->db->distinct();
    if($_POST){
        $usid = $this->input->post('UserID');
        $ustxt = $this->input->post('TextSearch');
        if(!empty($ustxt) || !empty($usid)){
            if(!empty($usid)){
                $this->db->where('a.UserID', $usid);
            }elseif(!empty($ustxt)){
                $this->session->set_userdata('USrch_Txt', $ustxt);
                $this->db->join('vwSelectUserAddress b', 'b.userID = a.userID', 'left');
                $this->db->join('vwSelectUserEmail c', 'c.userID = a.userID', 'left');
                $this->db->join('vwSelectUserPhone d', 'd.userID = a.userID', 'left');
                $this->db->join('vwSelectUserNotes e', 'e.userID = a.userID', 'left');
                $this->db->join('vwSelectUserVehicle f', 'f.userID = a.userID', 'left');
                $this->db->like('a.Username', $ustxt);
                $orlike = array('a.UserFullName'=>$ustxt,
                                'b.addressStreet1'=>$ustxt,
                                'b.addressStreet2'=>$ustxt,
                                'b.addressCity'=>$ustxt,
                                'b.addressState'=>$ustxt,
                                'b.addressPostalCode'=>$ustxt,
                                'c.emailAddress'=>$ustxt,
                                'd.phoneNumber'=>$ustxt,
                                'e.Note'=>$ustxt,
                                'f.vehMake'=>$ustxt,
                                'f.vehModel'=>$ustxt,
                                'f.vehYear'=>$ustxt,
                                'f.vehTran'=>$ustxt,
                                'f.vehMake'=>$ustxt,
                                'f.vehEngine'=>$ustxt,
                                'f.vehDescription'=>$ustxt,);
                $this->db->or_like($orlike);
            }
        }
    }
    $this->db->order_by('a.UserFullName', 'asc');
    $this->db->limit(12, $page);
    $qry = $this->db->get('vwSelectUser a');
    
    $rs = $qry->result_array();
    $config['base_url'] = '/users';
    $config['per_page'] = 12;
    $config['total_rows'] = $this->db->count_all('vwSelectUser');
    $config['num_links'] = 5;
    $config['first_link'] = '<span class="fa fa-angle-double-left page_num"></span>';
    $config['last_link'] = '<span class="fa fa-angle-double-right page_num"></span>';
    $config['cur_tag_open'] = '<span class="page_num bold">';
    $config['cur_tag_close'] = '</span>';
    $config['next_link'] = '<span class="fa fa-angle-right page_num"></span>';
    $config['prev_link'] = '<span class="fa fa-angle-left page_num"></span>';
    $config['uri_segment'] = 2;
    $config['num_tag_open'] = '<span class="page_num">';
    $config['num_tag_close'] = '</span>';
    $this->pagination->initialize($config);
    $data['rs'] = $rs;
    $data['paging'] = $this->pagination->create_links();
    $data['current_page'] = $page;
    $this->load->view('templates/header');
    $this->load->view('pages/users/list', $data);
    $this->load->view('templates/footer');
}

如您所见,我在这里有一些搜索参数。我需要将$config['total_rows'] 更改为$this-&gt;db-&gt;count_all_results('vwSelectUser'),但是当我这样做时,我会遇到以下错误:

Column "vwSelectUser.UserFullName" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

我该如何解决这个问题,#1 以便它显示正确的分页链接(如果有的话),#2 以获得过滤返回的正确计数?

虽然我这样做了:$config['total_rows'] = ($_POST) ? $this-&gt;db-&gt;count_all_results('vwSelectUser a') : $this-&gt;db-&gt;count_all('vwSelectUser a'); 它应该可以解决问题,但我得到了指定的错误。

【问题讨论】:

    标签: php sql sql-server codeigniter


    【解决方案1】:

    我猜代码中发生了太多事情,我无法说出您要做什么。

    1 - 运行 SQL 分析器跟踪以捕获您实际发送到数据库引擎的内容。

    http://technet.microsoft.com/en-us/library/ms181091.aspx

    2 - 所有的连接都可以在 TSQL 语句中完成。事实上,数据库中的用户定义视图可以简化 PHP 中的调用。

    http://technet.microsoft.com/en-us/library/ms181091.aspx

    3 - 当您按一组列分组并尝试对不在列表中的列进行排序时,会出现错误代码。

    分组时,要么该列必须在分组列表中,要么是另一个列上的聚合函数。

    4 - 像任何旧式 ASP 代码一样,注释掉不起作用的部分。让它工作并逐步添加回代码。

    总之,没有实际的代码和数据库,我只能给你上面的指导方针。我认为 1 和 2 可能会简化代码并让您了解问题所在。

    祝你好运,J

    PS:注释掉 $this->db->order_by('a.UserFullName', 'asc'); 看看计算是否有效。对数据库的单独调用可以计算出总数,并且可能不会导致此错误。但是,视图肯定会清理代码。

    【讨论】:

    • 在注释掉它之后它确实有效......实际上我找到了一个解决方法/修复它。如果我将查询(减去订单)包装在start_cache/stop_cache 中,然后将count_all_results 放在它后面,我可以让它正常工作。
    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 2017-11-20
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2021-11-13
    相关资源
    最近更新 更多