2014-03-12 31 views
0

我似乎在codeigniter和我的搜索查詢分頁問題。CI MSSQL連接和Paginator類的問題

代碼

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->db->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->db->count_all_results('vwSelectUser a') : $this->db->count_all('vwSelectUser a');它應該做的伎倆,但我得到指定的錯誤。

回答

1

我想代碼中有這麼多事情我不知道你在做什麼。

1 - 運行SQL事件探查器跟蹤以捕獲實際發送到數據庫引擎的內容。

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

2 - 所有的加入可以在T-SQL語句做的權利。事實上,數據庫中的用戶定義視圖可以簡化PHP中的調用。

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

3 - 當你被一組列的分組,並嘗試用一列是不在列表中做一個訂單錯誤代碼發生。

分組時,列必須位於分組列表中,或列位於另一列的聚合函數中。

4 - 像任何老式的ASP代碼一樣,註釋掉不起作用的部分。讓它工作並逐步添加代碼。

總之,沒有實際的代碼和數據庫,我只能給你上面的指引。我認爲可能會簡化代碼並讓您瞭解哪些是錯誤的。

好運,J

PS:評論出$這 - > DB-> ORDER_BY( 'a.UserFullName', 'ASC');並查看計算是否有效。對數據庫的單獨調用可以計算出總數並且可能不會導致此錯誤。但是,一個視圖可能會清除代碼。

+0

它評論它後,它確實工作......實際上,我找到了解決辦法/修復它。如果我在'start_cache/stop_cache'中包裝查詢(減去順序),然​​後將'count_all_results'放在後面,我就可以正常工作。 – Kevin