2010-11-24 9 views
0

Jusqu'à présent trouvé beaucoup d'aide pour obtenir la pagination de travail pour une commande get(table).pagination codeigniter pour une requête

Ce dont j'ai besoin est de ne sélectionner que quelques-unes des entrées d'un couple de tables liées en fonction d'une instruction sql where.

Je suppose que la commande query est celui à utiliser, mais dans ce cas, comment dois-je faire la pagination depuis cette commande ne prend pas de paramètres supplémentaires tels $config['per_page']

Merci pour l'aide

Répondre

2

Sans plus d'informations pour continuer je pense que ce que vous cherchez est quelque chose comme ce qui suit.

public function pagination_example($account_id) 
{ 
    $params = $this->uri->ruri_to_assoc(3, array('page')); 

    $where = array(
     'account_id' => $account_id, 
     'active'  => 1 
    ); 

    $limit = array(
     'limit'  => 10, 
     'offset' => (!empty($params['page'])) ? $params['page'] : 0 
    ); 

    $this->load->model('pagination_model'); 
    $data['my_data'] = $this->pagination_model->get_my_data($where, $limit); 

    foreach($this->uri->segment_array() as $key => $segment) 
    { 
     if($segment == 'page') 
     { 
      $segment_id = $key + 1; 
     } 
    } 

    if(isset($segment_id)) 
    { 
     $config['uri_segment'] = $segment_id; 
    } 
    else 
    { 
     $config['uri_segment'] = 0; 
    } 

    $config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/controller_name/method_name/whatever_your_other_parameters_are/page/';    
    $config['total_rows'] = $this->pagination_model->get_num_total_rows();// Make a method that will figure out the total number 
    $config['per_page']  = '10'; 

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

    $this->load->view('pagination_example_view', $data); 

} 

    // pagination_model 
public function get_my_data($where = array(), $limit = array()) 
{ 
    $this->db 
     ->select('whatever') 
     ->from('wherever') 
     ->where($where) 
     ->limit($limit['limit'], $limit['offset']); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) 
    { 
     $data = $query->result_array(); 
     return $data; 
    } 
    return FALSE; 
} 

Cela devrait au moins vous obtenez sur la bonne voie Si c'est pas ce que vous demandez, je serais heureux de vous aider plus si vous pouvez être un peu plus précis. Que diriez-vous de votre code?

+0

Mon plus gros problème est de savoir comment configurer $ config ['total_rows']; J'ai l'impression que je dois interroger la base de données deux fois: une fois sans les limites (pour obtenir $ config ['total_rows']) et la deuxième fois avec une limite pour l'affichage. Cela semble inefficace. est-ce comme ça? – salmane

+0

oui c'est. 2 requêtes. – trix

0

Les seules autres options que je peux envisager serait soit de coder un nombre dans votre instruction select ou ne pas limiter la requête et utiliser array_slice pour sélectionner une partie du tableau retourné.

Questions connexes