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,而是显示员工姓名。


编辑......................................所以我可以使用以下代码仅显示员工的姓氏:

$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) 中的第二个参数):

$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 将不会尝试使用反引号保护您的字段或表名。如果您需要复合选择语句,这很有用。

于 2011-01-07T09:09:15.437 回答
0
$query=$this->db->select("id, CONCAT(nombre,".' '.",apellido_paterno) as nombre", false)->
                                from("empleado")->
                                where('empleado', $filtro)->
                                order_by("nombre")->
                                get();

只添加 false 来选择

于 2014-04-05T18:24:13.277 回答