无法在Codeigniter中加入3个表格

时间:2019-03-02 13:55:12

标签: codeigniter codeigniter-3

我要从codeigniter检索产品,其中有三个表:

  1. dg_products
  2. dg_rating
  3. dg_like

加入dg_products并且dg_rating正常工作后,我想从dg_like获得相同的状态。

dg_like的结构是:

id | P_id | Uid

我可以从会话中检索当前登录的用户ID,但无法检索该用户是否喜欢该特定产品。请提出任何建议。

public function get_featured()
{
        $this->db->select('dg_products.*, AVG(dg_rating.rating) As averageRating');
        $this->db->from('dg_products');
        $this->db->join('dg_rating', 'dg_products.id = dg_rating.product_id','left');
        $user_info=$this->session->userdata('logged_in');
        $user_id=$user_info['id'];

        if($user_id != '') {
            $this->db->join('dg_like', 'user_id = dg_like.u_id');
        }

        $this->db->where('dg_products.is_featured_prod','1');
        $this->db->group_by("dg_products.id");

        $query = $this->db->get();   

        $result = $query->result();
        return $result; 
}

2 个答案:

答案 0 :(得分:0)

根据您提供的信息,您正在使用不存在的字段加入

如果dg_like的结构是

  

id | P_id | Uid

join语句应为

 $this->db->join('dg_like', 'user_id = dg_like.Uid');

我会更进一步,建议您将其设置为LEFT JOIN,这样查询的输出将包含所有行,无论是否喜欢:

 $this->db->join('dg_like', 'user_id = dg_like.Uid', 'LEFT');

希望有效

答案 1 :(得分:0)

如果您检索当前已登录的用户记录,则根据表 dg_like 的结构ID | P_id | id在这里,$ user_id是登录用户ID。

$this->db->select('dg_products.*, AVG(dg_rating.rating) As averageRating');
$this->db->from('dg_products');
$this->db->join('dg_rating', 'dg_products.id = dg_rating.product_id','left');

if($user_id != '') {
     $this->db->join('dg_like', 'dg_products.id = dg_like.P_id');
}
$this->db->where('dg_like.Uid',$user_id);
$this->db->where('dg_products.is_featured_prod','1');
$this->db->group_by("dg_products.id");
$query = $this->db->get();   
$result = $query->result();

希望您的问题得到解决。