如何在CodeIgniter中执行JOIN操作并获取结果?

时间:2015-09-04 10:27:07

标签: php codeigniter

对于CI系统,我有一个经销商表和用户表。每个用户都通过名为 KEY 的字段映射到其代理商,该字段是唯一字符串。在用户表和经销商的表中,每个用户(记录)都有一个映射到它的经销商密钥。我希望你理解这个概念。现在我想为管理员创建一个视图。目前我显示reseller列表和用户列表,现在如何创建一个视图,当我点击reseller时,我只能看到他的经销商?

这里我在index函数中获取所有代理商如何基于密钥

进行过滤
    public function index ()
        {
            $usertype=$this->session->userdata('usertype');
            if($usertype ==="admin")
                {
                    // Fetch all users
                    $this->data['users'] = $this->reseller_m->get();
                    // Load view
                    $this->data['subview'] = 'admin/reseller/index';
                    $this->load->view('admin/_layout_main', $this->data);
                }
            else
                {
                    $this->load->view('permission');
                }   
        }

2 个答案:

答案 0 :(得分:2)

您可以像这样使用CI active records

$this->db->select('*');
$this->db->from('reseller');
$this->db->join('users', 'reseller.KEY = users.KEY');
$this->db->WHERE('reseller.key',$reseller_id);
$result = $this->db->get();

只需将结果输入更改为视图即可。在第一页上,您传递了所有用户结果的结果,因此,如果用户点击特定的经销商,那么基本上您必须将经销商ID传递给控制器​​,对吧?使用该id只需通过if else条件将查询结果切换到视图。

    public function index ()
        {
            $usertype=$this->session->userdata('usertype');
            $reseller_id=$this->input->get('reseller_id');
            if($usertype ==="admin")
                {

              if($reseller_id){

                    // Fetch only resellers users

                  $this->db->select('*');
                  $this->db->from('reseller');
                  $this->db->join('users', 'reseller.KEY = users.KEY');
                  $this->db->WHERE('reseller.key',$reseller_id);
                  $this->data['users'] = = $this->db->get();

                  }else{
                    // Fetch all users
                    $this->data['users'] = $this->reseller_m->get();

                 }
                    // Load view
                    $this->data['subview'] = 'admin/reseller/index';
                    $this->load->view('admin/_layout_main', $this->data);
                }
            else
                {
                    $this->load->view('permission');
                }   
        }

答案 1 :(得分:1)

这个怎么样?

// Fetch all users
$this->data['users'] = $this->get('users');
foreach($this->data['users'] as $ind=>$row){
  // then connect resellers to each user
  $this->data['users'][$ind]['resellers'] = $this->reseller_m->->where('key', $row['id'])->get();
}

首先,您将所有用户都添加到阵列并连接到其经销商的每个用户。我希望你已经定义了" reseller_m"作为模型和方法,其中我编辑的()现在只指定用户的收件人。

或者这行我会这样做:(没有定义模型)

$this->data['users'][$ind]['resellers'] = $this->where('key', $row['id'])->get('resellers');