如何从Mysql和Codeigniter中的两个表中获取数据
我正在开发使用codeigniter框架开发的硬件商店的销售点。如何从Mysql和Codeigniter中的两个表中获取数据
我想拿出帐户的详细陈述就像下面的图片
我有两个表这是销售和支付,我想从这个两个表的数据,以便我可以生成特定客户的账户报表。
这样做会有所帮助,因为客户可以以现金或信用为基础查看他/她购买的所有物品,并显示他们已按日期分组了多少钱。
也可以计算到期金额。
我可以通过使用下面的代码单独列出(销售和付款),从而计算到期金额。
销售
<?php
$salestotal = 0;
if (is_array($sales) || is_object($sales))
{
foreach ($sales as $key=>$sale): {?>
<tr>
<td>
<?php echo $sale->date; ?>
</td>
<td>
<?php echo $sale->id; ?>
</td>
<td>
<?php echo $sale->grand_total; ?>
</td>
<td>
<?php echo $sale->paid; ?>
</td>
<td></td>
</tr>
<?php
if(isset($sale->grand_total))
$salestotal += $sale->grand_total;
} endforeach ; }?>
付款
<?php
$paymentstotal = 0;
if (is_array($payments) || is_object($payments))
{
foreach ($payments as $key=>$payment): {?>
<tr>
<td>
<?php echo $payment->date; ?>
</td>
<td class="text-center">
<?php echo $payment->sale_id; ?>
</td>
<td class="text-center">
<?php echo $payment->paid_by; ?>
</td>
<td class="text-center">
<?php echo $payment->cheque_no; ?>
</td>
<td class="text-center">
<?php echo $payment->amount; ?>
</td>
<td class="text-center">
<?php echo $this->customers_model->getUserna($payment->created_by); ?>
</td>
<td class="text-center">
<?php echo $payment->pos_paid; ?>
</td>
<td class="text-center">
<?php echo $payment->pos_balance; ?>
</td>
<td class="text-right">
<?php echo $this->customers_model->getStorename($payment->store_id); ?>
</td>
</tr>
<?php
if(isset($payment->amount))
$paymentstotal += $payment->amount;
} endforeach ;}?>
我控制器
function statement($id = NULL)
{
if (!$this->Admin) {
$this->session->set_flashdata('error', $this->lang->line('access_denied'));
redirect('pos');
}
if($this->input->get('id')) { $id = $this->input->get('id', TRUE); }
$this->data['sales'] = $this->customers_model->getSales($id);
$this->data['payments'] = $this->customers_model->getPayments($id);
$this->data['customer'] = $this->customers_model->getCustomername($id);
$this->data['customer_id'] = $id;
$this->page_cons('customers/statement', $this->data);
}
我的模型
public function getSales($id)
{
$q = $this->db->get_where('sales', array('customer_id' => $id));
if($q->num_rows() > 0) {
return $q->result();
}
return FALSE;
}
public function getPayments($id)
{
$q = $this->db->get_where('payments', array('customer_id' => $id));
if($q->num_rows() > 0) {
return $q->result();
}
return FALSE;
}
如何合并这两个表?
我希望我对这个问题已经够清楚了,我一直在努力Google,但我没有运气。
我会很感激任何帮助。由于
编辑
MySQL表
付款
您可以重复使用的新方法getSalesWithPayments()
给定的方法getSales()
和getPayments()
两个结果组合:
public function getSalesWithPayments($customerId) {
$sales = [];
foreach ($this->getSales($customerId) as $sale) {
$sale->payment = null;
$sales[$sale->id] = $sale;
}
foreach ($this->getPayments($customerId) as $payment) {
$sales[$payment->sale_id]->payment = $payment;
}
return $sales;
}
在初始化$sale->payment
第一循环(对于销售尚未付款的情况)并填充$sales
数组,该数组由id
列索引。通过这种方式,您无需进行昂贵的搜索即可轻松访问其ID的任何销售。
在第二个循环中,您将付款分配给相应的销售额。
请注意,您可能需要添加逻辑来处理空结果(如果您只是返回空数组而不是FALSE
,则不需要)。
现在,您可以使用它像..
控制器:
$this->data['sales'] = $this->customers_model->getSalesWithPayments($id);
查看:
<?php foreach ($sales as $sale): ?>
<tr>
<td><?php echo $sale->date; ?></td>
<td><?php echo $sale->id; ?></td>
...
<?php if($sale->payment !== null): ?>
<td><?php echo $sale->payment->date; ?></td>
<td><?php echo $sale->payment->amount; ?></td>
...
<?php else: // empty cells if no payment ?>
<td></td>
<td></td>
...
<?php endif; ?>
</tr>
<?php endforeach; ?>
非常感谢您的帮助 – kikuyu1
如果您发布的sales
和payments
表的答案一定会越来越准确。您可以使用MySQL Join从2个表中获取组合数据。
试试这个:
$this->db->select('*')
->from('sales')
->join('payments', 'payments.sales_id = sales.id', 'right')
->where(array('sales.customer_id' => $id));
$results = $this->db->get();
更新'sales' ANB'payments'表的结构问题。 –
@TouheedKhan,我用Mysql表更新了我的问题 – kikuyu1