2015-04-06 2 views
-2

У меня есть следующие таблицы:Codeigniter SQL запрос присоединиться на двух разных колонках

пользователей:

+----+-------+-------+ 
| ID | fname | lname | 
+----+-------+-------+ 
| 1 | Joe | Doe | 
+----+-------+-------+ 
| 2 | Jane | Doet | 
+----+-------+-------+ 

Продукты:

+----+------+------------+------------+ 
| ID | name | created_by | updated_by | //created_by and updated_by are user Ids 
+----+------+------------+------------+ 
| 1 | some | 1   | 1   | 
+----+------+------------+------------+ 
| 2 | some | 1   | 2   | 
+----+------+------------+------------+ 
| 3 | some | 2   | 2   | 
+----+------+------------+------------+ 
| 4 | some | 2   | 1   | 
+----+------+------------+------------+ 

Я хочу, чтобы создать запрос, который выводит следующее стол:

+--------------+------------+------------+ 
| Product Name | Created By | Updated By | 
+--------------+------------+------------+ 
| Some   | Jane Doet | Joe Doe | 
+--------------+------------+------------+ 

До сих пор я использую Join так:

public function getAll() { 
    $this->db->select('products.* , users.fname, users.lname'); 
    $this->db->from('products'); 
    $this->db->join('users', 'users.id = products.updated_by', 'left'); 
    $q = $this->db->get(); 
    return $q->result(); 
} 

который производит следующее:

SELECT products.*, users.fname, users.lname 
FROM `products` 
LEFT JOIN users ON users.id=products.updated_by 

Это работает, и получает мне информацию updated_by пользователя, но что, если я хочу как created и updated информация о пользователе, как я могу сделать этот запрос?

+0

Добавить еще присоединиться один, которые соединяют 'created_by' –

+1

Не могли бы вы показать мне, как? – CodeGodie

ответ

1

Я инвалид codeigniter, но если я правильно понимаю ваши требования, то следующие могут быть полезны.

public function getAll() { 
    $selqry = 'p.* , u.fname as fname_ub, u.lname as lname_ub' 
    $selqry .= ', c.fname as fname_cb, c.lname as lname_cb' 

    $this->db->select($selqry); 
    $this->db->from('products as p'); 
    $this->db->join('users u', 'u.id = p.updated_by', 'left'); 

    $this->db->join('users c', 'c.id = p.created_by', 'left'); 

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

    return $q->result(); 
} 

Приведенный выше код должен произвести следующие SQL заявление:

SELECT 
     p.*, u.fname as fname_ub, u.lname as lname_ub 
     , c.fname as fname_cb, c.lname as lname_cb 
FROM `products` as p 
LEFT JOIN users u ON u.id=p.updated_by 
LEFT JOIN users c ON c.id=p.created_by 
+0

Это определенно полезно. Я ценю это. Я попробовал инструкцию SQL, и она работает. Я попробую ваш код CI и реализую его. большое спасибо – CodeGodie

1

да эта работа префекта это очень услужливо для меня

в мой контроллер

public function out() 
    { 
      $selqry = 'p.* , u.items as REAL' ; 
      $selqry .= ', c.items as ITEM' ; 
      $this->db->select($selqry); 
      $this->db->from('outgoing as p'); 
      $this->db->join('financial_items u', 'u.id = p.item_id_real', 'left'); 
      $this->db->join('financial_items c', 'c.id = p.item_id', 'left'); 
      $query = $this->db->get(); 
      $data = $query->result(); 
      echo json_encode($data); 

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