Php 通过codeigniter中的电子邮件id获取数据库

Php 通过codeigniter中的电子邮件id获取数据库,php,mysql,codeigniter,Php,Mysql,Codeigniter,控制器[在文章页面中正确使用分页,将用户电子邮件id存储在“articles”数据库中,现在我尝试从users表中获取用户名和lastname,但无法正常工作] public function articles() { $data['title'] = "Articles"; $config = array(); $config["base_url"] = base_url() . "sd/articles/"; $config["total_

控制器[在文章页面中正确使用分页,将用户电子邮件id存储在“articles”数据库中,现在我尝试从users表中获取用户名和lastname,但无法正常工作]

  public function articles()
   {    
    $data['title'] = "Articles";

    $config = array();
    $config["base_url"] = base_url() . "sd/articles/";
    $config["total_rows"] = $this->model_users->record_count_articles();
    $config["per_page"] = 10;
    $config["uri_segment"] = 3;


    $this->pagination->initialize($config);

    $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
    $data["results"] = $this->model_users->fetch_result_articles($config["per_page"], $page);
    $data["links"] = $this->pagination->create_links();


    if ($this->session->userdata ('is_logged_in')){
        $data['profile']=$this->model_users->profilefetch();
        $this->load->view('sd/header',$data);
        $this->load->view('sd/articles', $data);
        $this->load->view('sd/footer', $data);
    } else {
        $this->load->view('sd/sdheader', $data);
        $this->load->view('sd/articles', $data);
        $this->load->view('sd/sdfooter', $data);
    }
}   
模型[在文章页面中获取用户名]

     public function record_count_articles() {
           return $this->db->where('status','1')->count_all("articles");
       }

    public function fetch_result_articles($limit, $start) {
        $this->db->limit($limit, $start);
        $query = $this->db->where('status','1')->order_by('id', 'DESC')->get("articles");

        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $data[] = $row;

            }
            return $data;
        }
        return false;
    }
添加这些行[但不工作]

  if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $data[] = $row;
                $query = $this->db->select('firstname')->select('lastname')->where('email',$data[0]->email)->get("users");
                $data['name_info']=$query->result_array();
            }
            return $data;
        }
        return false;

你这里有两个问题。请查看代码中的注释

 if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                //1) $data[0]->email keep repeating same email.
                //   inner $query variable should be different.  
                $innerQuery = $this->db->select('firstname,lastname')->where('email',$row->email)->get("users");
                //2) you need to store query result on array.
                // $data['name_info'] stores only single record.
                $data[]=$innerQuery ->result_array();
            }
            return $data;
        }
        return false;
如果可以通过join实现查询,则应避免循环中的查询

public function fetch_result_articles($limit, $start) {
        $this->db->limit($limit, $start);
        $query = $this->db
      ->join('users u','u.email = a.email','left')
      ->where('a.status','1')->order_by('a.id', 'DESC')->get("articles a");

        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $data[] = $row;

            }
            return $data;
        }
        return false;
    }
编辑:让我们用join试试这个

public function fetch_result_articles($limit, $start) {
        $this->db->limit($limit, $start);
        $query = $this->db
      ->join('users u','u.email = a.email','left')
      ->where('a.status','1')->order_by('a.id', 'DESC')->get("articles a");

        if ($query->num_rows() > 0) {
            foreach ($query->result() as $row) {
                $data[] = $row;

            }
            return $data;
        }
        return false;
    }

我还没有测试代码。但这是一种比循环更好的方式。

将此$row->email改为data[0]->email,并对此行进行注释//$data[]=$row;仅第一篇文章名称获取,名称数组不重复您的代码是帮助完整数组正确重复,但问题是我需要文章数据,所以我将添加以下行:“$data[]=$row;”,我的第一篇文章在[0]中打印,名称在[1]中打印,第二篇文章在[2]中打印,名称在[3]中打印您能告诉我您的外部
$query
是如何编写的吗?不是
$innerQuery
谢谢,伙计,“加入”的方式非常有效,谢谢:)