Помогите с PHP MySQL присоединиться - PullRequest
0 голосов
/ 06 января 2011

Пожалуйста, помогите мне понять правильный синтаксис соединения.

У меня есть таблица с именем инвентарь , которая имеет:

trans_id    
trans_items items -> item_id         
trans_user  employees -> person_id           
trans_date                   
trans_comment                
trans_inventory     

Как вы можете видеть выше, trans_items являетсявнешний ключ в таблице элементов, а trans_user - внешний ключ в таблице сотрудников, а идентификатор сотрудника - внешний ключ для таблицы сотрудников.

Теперь я хочу отобразить в HTML таблицу инвентаризации, но вместо отображенияидентификатор сотрудника, я хочу, чтобы отображалось имя сотрудника.


РЕДАКТИРОВАТЬ ................................................ поэтому я смог отобразить только фамилию сотрудника с этим кодом:

$this->db->select('inventory.*, items.name ,people.last_name');
$this->db->from('inventory');
$this->db->join('items', 'inventory.trans_items = items.item_id' , 'left');
$this->db->join('people', 'inventory.trans_user = people.person_id' , 'left');
$this->db->where('deleted', 0);
$this->db->order_by('trans_date desc');

с модельюкод:

foreach($report_data as $row)
        {
            $tabular_data[] = array($row['name'], $row['last_name'],$row['trans_date'], $row['trans_inventory'], $row['trans_comment']);
        }

но мне нужно, чтобы это были имя и фамилия, поэтому я сделал это:

$this->db->select('inventory.*, items.name ,CONCAT(people.first_name, " ",people.last_name) as employee');
$this->db->from('inventory');
$this->db->join('items', 'inventory.trans_items = items.item_id' , 'left');
$this->db->join('people', 'inventory.trans_user = people.person_id' , 'left');
$this->db->where('deleted', 0);
$this->db->order_by('trans_date desc');

с кодом модели:

foreach($report_data as $row)
        {
            $tabular_data[] = array($row['name'], $row['employee'],$row['trans_date'], $row['trans_inventory'], $row['trans_comment']);
        }

было бы ошибкой, если бы я использовал функцию concat.пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 06 января 2011

Это должно работать для вас

   $this->db->select('inventory.*, items.name ');
   $this->db->from('inventory');
   $this->db->join('items', 'inventory.item_id = items.item_id');
   $this->db->order_by('trans_date desc');

   return $this->db->get()->result_array();
0 голосов
/ 06 января 2011

Следующие будут работать для вас.

$this->db->select('items.name , inventory.trans_user, inventory.trans_date, inventory.trans_inventory, inventory.trans_comment');
$this->db->from('inventory');
$this->db->join('items', 'inventory.item_id = items.item_id');
$this->db->order_by('inventory.trans_date desc');

return $this->db->get()->result_array();

РЕДАКТИРОВАТЬ -------------------------

Попробуйте следующее. Это поможет ..

$this->db->select('inventory.*, items.name ,CONCAT(employees.first_name, " ",employees.last_name) as employee');
$this->db->from('inventory');
$this->db->join('items', 'inventory.trans_items = items.item_id' , 'left');
$this->db->join('employees', 'inventory.trans_user = employees.person_id' , 'left');
$this->db->join('people', 'employees.person_id = people.person_id' , 'left');
$this->db->where('deleted', 0);
$this->db->order_by('trans_date desc');

ПРИМЕЧАНИЕ. Я предположил, что свойства имени и фамилии являются частью таблицы сотрудников. Вы можете изменить его на имя таблицы, к чему бы он ни принадлежал.

Спасибо!

Хуссейн.

0 голосов
/ 06 января 2011
SELECT
    t.trans_id,
    i.item_name,
    t.trans_user,
    t.trans_date,
    t.trans_comment,
    t.trans_inventory
FROM
    trans as t
        LEFT JOIN
            items as i 
                ON
                    i.item_id = t.trans_items
LIMIT 0, 30;

В приведенном выше запросе сделаны некоторые предположения, такие как имя элемента feild: item_name, имя главной таблицы * trans и т. Д.

То, что я здесь использовал, это левое соединение.

В этом примере лучше всего использовать левое соединение, поскольку оно выбирает только одну строку из таблицы элементов.

Дополнительные сведения о соединениях: Справочное руководство по MySQL :: MySQL 5.0:: 12.2.8.1 Синтаксис JOIN

--- Обновление.PS: это опубликовано, прежде чем вы обновите о CodeIgniter.И я не знаком с этим.Таким образом, вы можете удалить этот ответ или оставить его здесь для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...