I have the following two mysql queries and I am trying to combine them into one.
Query 1:
$getData = $this->db->query("SELECT *,accounts.name AS DebitAccountName ,debit_side.amount AS DebitAmount
FROM credit_side
LEFT JOIN debit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr
LEFT JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr
LEFT JOIN accounts ON accounts.code = credit_side.account_code
WHERE debit_side.account_code='1001'");
Query 2:
$getData = $this->db->query(SELECT *,accounts.name AS CreditAccountName,credit_side.amount AS CreditAmount
FROM debit_side
LEFT JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr
LEFT JOIN transaction_info ON transaction_info.transaction_id = debit_side.transaction_id_dr
LEFT JOIN accounts ON accounts.code = debit_side.account_code
WHERE credit_side.account_code='1001'");
I have tried UNION ALL but this is actually not working in this case, The problem is when I echo $DebitAccountName
it displays the results of $CreditAccountName
as well, which I don't want.
I am using Codeigniter, and in my view file I aim to echo the results like this.
<?php if(count($records) > 0) { ?>
<?php foreach ($records as $row){ ?>
<?php echo $row['DebitAccountName']; ?>
<?php echo $row['DebitAmount']; ?>
<?php echo $row['CreditAccountName']; ?>
<?php echo $row['CreditAmount']; ?>
Would you please kindly help me get the two queries into one?
Thanks in Advance :)
I have combined these queryies
$data = array(
'debit_side.account_code Code',
'group_concat(distinct accounts.name) as DebitAccount',
'group_concat(debit_side.amount) as DebitAmount',
'group_concat(transaction_info.voucher_date) as DebitVoucherDate',
'(SELECT group_concat(distinct accounts.name) as CreditAccount FROM (accounts)
left JOIN debit_side ON accounts.code = debit_side.account_code
left JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr
left JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr
group by credit_side.account_code
having credit_side.account_code = `Code`) as CreditAccount',
'(SELECT group_concat(credit_side.amount) as CreditAmount FROM (accounts)
left JOIN debit_side ON accounts.code = debit_side.account_code
left JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr
left JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr
group by credit_side.account_code
having credit_side.account_code = `Code`) as CreditAmount',
'(SELECT group_concat(transaction_info.voucher_date) as CreditVoucherDate FROM (accounts)
left JOIN debit_side ON accounts.code = debit_side.account_code
left JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr
left JOIN transaction_info ON transaction_info.transaction_id = credit_side.transaction_id_cr
group by credit_side.account_code
having credit_side.account_code = `Code`) as CreditVoucherDate'
);
$this->db->select($data);
$this->db->from('accounts');
$this->db->join('credit_side','accounts.code = credit_side.account_code','left');
$this->db->join('debit_side','debit_side.transaction_id_dr = credit_side.transaction_id_cr','left');
$this->db->join('transaction_info','transaction_info.transaction_id = credit_side.transaction_id_cr','left');
$this->db->group_by('debit_side.account_code');
$this->db->order_by('debit_side.account_code','ASC');
$query = $this->db->get();
return $query->result_array();
See Edits here too
How to create General Ledger/T-Account using PHP Mysql
Well here is a modified and optimized version of this query thanks to @vyegorov
Strange Behaviour of Group by in Query which needs to be optimized
Why don't you use SELECT from both tables (debit_side and credit_side)? Of course with all JOINs you need for each table.
For simplicity sake, I've left out the transaction_info JOIN:
SELECT debacc.name AS DebitAccountName, debit_side.amount AS DebitAmount,
credacc.name AS CreditAccountName, credit_side.amount AS CreditAmount
FROM debit_side
LEFT JOIN credit_side ON debit_side.transaction_id_dr = credit_side.transaction_id_cr
LEFT JOIN accounts credacc ON credacc.code = credit_side.account_code
LEFT JOIN accounts debacc ON debacc.code = debit_side.account_code
WHERE debit_side.account_code='1001'
This query references the accounts table twice, once for debit side, once for credit side. This allows you to show info from both sides of the transaction.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.