2015-05-16 1 views
0

У меня есть одна запись в таблице листинга 1 в таблице property_address и три изображения в таблице property_images, которые принадлежат к одной записи в таблице листинга. Теперь, на самом деле, я хочу вернуть одну строку, все изображения. Но то, что я получаю, это 3 строки, и из-за этих 3 изображений с каждым изображением в таблице изображений свойств создается новая строка.Codeigniter join возвращает ту же запись три раза

У меня есть три таблицы

  1. листинг
  2. property_address
  3. property_images

Вот схема. 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>"; 
    } 
+0

Вы можете выполнить 'echo $ this-> db-> last_query();' после запроса в вашем контроллере, просмотреть запрос MySQL и использовать этот запрос для выполнения в phpmyadmin, чтобы увидеть, если есть проблема с запросом или не! – Viral

+0

запрос работает с идеальной проблемой с одинаковыми множественными записями, но с разными изображениями – Vicky

+0

Результат ожидается. У вас есть 3 строки в 'property_images', поэтому результат будет 3.Вы должны представить пример того, как вы хотите одну строку. –

ответ

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(); 
} 
+0

все еще получает 3 одинаковые строки – Vicky

1

Ну на самом деле это, вероятно, будет возвращать 3 записи, потому что property_address таблица имеет отношение с листинга таблицы и когда вы присоединитесь и получить запись он будет вернуть 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; 
     } 

}

Я надеюсь, что это поможет.

+0

, так что это значит, что я должен использовать данные в программировании, не имеет большого значения, если у них есть одна и та же запись только с одним столбцом, как в ситуации, я – Vicky

+0

любой, как спасибо за помощь – Vicky

+0

да и добро пожаловать. –

Смежные вопросы