【问题标题】:Get database through email id in codeigniter通过codeigniter中的email id获取数据库
【发布时间】:2015-06-20 12:01:28
【问题描述】:

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

  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;

【问题讨论】:

  • 更改此 $row->email 而不是 data[0]->email 并评论此行 // $data[] = $row;
  • 只获取第一篇文章名称,名称数组不重复

标签: php mysql codeigniter


【解决方案1】:

这里有 2 个问题。请看一下代码中的 cmets。

 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实现,则应避免循环查询

编辑:让我们用 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;
    }

我没有测试过代码。但它比循环更好。

【讨论】:

  • 您的代码是帮助完整数组正确重复,但问题是我需要文章数据,所以我需要添加这些行,""" $data[] = $row; """,我的第一篇文章打印在 [0] 中并在 [1] 中打印姓名,在 [2] 中打印第二篇文章并在 [3] 中打印姓名
  • 你能告诉我你的外层$query是怎么写的吗?不是$innerQuery
  • 谢谢伙计,“加入”方式非常有效,谢谢:)
猜你喜欢
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多