3

適切な結合構文を理解するのを手伝ってください。

次のものを持つinventoryという名前のテーブルがあります。

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

上記のように、trans_items は items テーブルの外部キー、trans_user は employees テーブルの外部キー、employee id は people テーブルの外部キーです。

今私がやりたいことは、在庫表を HTML で表示することですが、従業員 ID を表示する代わりに、従業員 NAME を表示したいと考えています。


編集.................................................................そう次のコードを使用して、従業員の姓のみを表示できるようにしました。

$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 関数を使用するとエラーになります。助けてください。

4

2 に答える 2

22

選択は次のようにする必要があります ( $this->db->select('your select part', FALSE) の 2 番目のパラメーター):

$this->db->select('inventory.*, items.name ,CONCAT(people.first_name, " ",people.last_name) as employee', FALSE);
$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');

Codeigniter マニュアルからの引用:

FALSE に設定すると、CodeIgniter はフィールドまたはテーブル名をバッククォートで保護しようとしません。これは、複合 select ステートメントが必要な場合に便利です。

于 2011-01-07T09:09:15.437 に答える