Codeigniter连接返回相同的记录三次

时间:2015-05-16 09:12:24

标签: php mysql codeigniter join

我在property_address表中列出了一个记录,在property_images表中有三个图像属于列表中的那一个记录。现在我想要返回一行的所有图像。但我得到的是3行,因为3个图像与属性图像表中的每个图像都创建了一个新行。

我有三张桌子

  1. 列表
  2. property_address
  3. property_images
  4. 以下是架构Database Schema

    这是模型功能。

    public function get_listing($where)
        {
            $this->db->select('dl.*,pi.*,ps.*');
            $this->db->from('listing as dl');
            $this->db->join('property_address as ps','ps.property_add_id=dl.prop_id');
            $this->db->join('property_images as pi','pi.listing_id=dl.prop_id','right');
            if(!empty($where))
            {
                $this->db->where($where);
            }
            $query=$this->db->get();
            return $query->result();
        }
    

    这是控制器

    public function testin()
        {
            $data=$this->dba->get_listing(array('dl.prop_id'=>2));
            echo "<pre>";
            print_r($data);
            echo "</pre>";
        }
    

2 个答案:

答案 0 :(得分:1)

实际上它可能会返回3条记录,因为property_address表与列表有关系,当你加入并检索记录时,它将在外键的基础上和查询的基础上返回3条记录。

你应该做的是以编程的方式管理记录,就像你有3个相同的记录,不同的图像分别获取相同的记录,而不是循环图像。

示例:

public function testin()
    {
        $data=$this->dba->get_listing(array('dl.prop_id'=>2));
        echo "<pre>";
        print_r($data);
        echo "</pre>";
        echo $data[0]->id;
        echo $data[0]->title;
        echo $data[0]->prop_type;
        echo $data[0]->property_name;
        echo $data[0]->addres;
        etc....
        Now loop over images and you will get all three images
        foreach($data as $row):
        {
          echo $data->image;
        }

}

我希望它会有所帮助。

答案 1 :(得分:0)

您正在寻找左连接

public function get_listing($where)
{
    $this->db->select('dl.*,pi.*,ps.*');
    $this->db->from('listing as dl');
    $this->db->join('property_address as ps','ps.property_add_id=dl.prop_id','left');
    $this->db->join('property_images as pi','pi.listing_id=dl.prop_id','right','left');
    if(!empty($where))
    {
        $this->db->where($where);
    }
    $query=$this->db->get();
    return $query->result();
}