gpt4 book ai didi

php - 如何从 Mysql 和 Codeigniter 中的两个表中获取数据

转载 作者:可可西里 更新时间:2023-11-01 07:08:42 26 4
gpt4 key购买 nike

我正在为一家使用 codeigniter 框架开发的五金店设计销售点。

我想拿出一张详细的账户报表,如下图所示

enter image description here

我有两个表,分别是销售和付款,我想从这两个表中获取数据,以便生成特定客户的对帐单。

这会有所帮助,因为客户可以看到他/她以现金或信用为基础购买的所有元素,还可以显示他们按日期分组支付了多少。

还可以计算应付金额。

我可以使用下面的代码分别列出(销售和付款),从而计算应付金额。

销售

<?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 ;}?>

我的 Controller

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;
}

如何合并这两个表?

我希望我对这个问题足够清楚,我一直在尝试谷歌,但我没有运气。

我将不胜感激任何帮助。谢谢

编辑

MYSQL 表

销售 enter image description here

付款

enter image description here

最佳答案

您可以在新方法 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,则没有必要这样做)。

您现在可以像...一样使用它

Controller :

$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; ?>

关于php - 如何从 Mysql 和 Codeigniter 中的两个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43623764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com