我有两个表'accounts_transactions'和'accounts_bills_transactions'。 我必须使用codeigniter的活动记录来连接这两个。但是用于连接的键列的名称是不同的。所以我没有从输出中的左表中获取键列。我应该写什么查询来获取键结果中包含左表中的列。 我的代码是
$this->db->select('*');
$this->db->from('accounts_transactions');
$this->db->join('accounts_bills_transactions', 'accounts_transactions.id = accounts_bills_transactions.transaction_id','left');
$query = $this->db->get();
因此,正如您所看到的那样,用于连接的键列是左表中的id和第二个表中的transaction_id。问题是我没有从结果中的左表中获取id。但我得到了所有其他我认为问题是因为用于连接的列名不同。列名都没有命名为'id'。那么如何从结果中包含的左表中获取id。
答案 0 :(得分:5)
您可以为它们添加别名:
$this->db->select('accounts_transatctions.*, account_transactions.id AS a_id,
accounts_bills_transactions.*,
account_bills_transactions.id AS ab_id');
$this->db->from('accounts_transactions');
$this->db->join('accounts_bills_transactions', 'accounts_transactions.id = accounts_transactions.transaction_id','left');
$query = $this->db->get();
这两个ID现在可用a_id
和ab_id
(或您选择的任何别名)
注意:我不确定您是否可以在AR中使用别名而不会避免转义(暂时没有使用CI)。如果您因此出现任何错误,请将false
作为$this->db->select()
的第二个参数传递:
$this->db->select('...', false);
答案 1 :(得分:3)
如果您混淆使用$ this-> where或$ this-> join
,您可以试试这个$query = $this->db->query("select ......");
return $query;
答案 2 :(得分:1)
你的问题很简单。您可以使用此查询
$query = $this->db
->select('at.*')
->select('abt.id as abt_id');
->from('accounts_transactions at');
->join('accounts_bills_transactions abt', 'at.id = abt.transaction_id','left');
->get()
->result();
当在连接中使用相同的列时,它只选择一个。您需要将alise赋予第二个表中的其他列。最佳做法是使用这样的结构
accounts_transatctions
--------------------------
accounts_transatctions_id
other_columns
accounts_bills_transactions
---------------------------
accounts_bills_transactions_id
accounts_transatctions_id
other_columns