Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter活动记录左连接问题_Php_Mysql_Codeigniter_Activerecord_Left Join - Fatal编程技术网

Php Codeigniter活动记录左连接问题

Php Codeigniter活动记录左连接问题,php,mysql,codeigniter,activerecord,left-join,Php,Mysql,Codeigniter,Activerecord,Left Join,我有两个表“账户交易”和“账户票据交易”。 我必须使用codeigniter的活动记录左连接这两个。但是用于连接的键列的名称不同。因此,我没有从输出中的左表中获取键列。我应该编写什么查询以从结果中包含的左表中获取键列。 我的代码是 $this->db->select('*'); $this->db->from('accounts_transactions'); $this->db->join('accounts_bills_transa

我有两个表“账户交易”和“账户票据交易”。 我必须使用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和第二个表中的事务\ id。问题是我没有从结果中的左表中获取id。但我获取的是所有其他列。我假设问题是因为用于联接的列名不同。即两个列名都没有命名为“id”。那么如何从结果中包含的左表中获取id呢结果。

您可以将它们别名为:

$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->where或$this->join,可以尝试使用此选项

$query = $this->db->query("select ......"); 

return $query;

你的问题很简单。您可以使用此查询

$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

您可以尝试列出select中的所有列。您确定您的查询也可以吗?我的意思是,也许你不想要左连接…我需要左连接:)这是正确的吗?accounts\u transactions.id=accounts\u transactions.transaction\u id,不是吗accounts\u transactions.id=accounts\u bills\u transactions.transaction\u id,您加入到同一个表中…是的,这是一个输入错误。我需要的查询是accounts\u transactions.id=accounts\u bills\u transactions\u transactions\u id,它正在生成模糊列错误
accounts_transatctions
--------------------------
accounts_transatctions_id
other_columns

accounts_bills_transactions
---------------------------
accounts_bills_transactions_id
accounts_transatctions_id
other_columns