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

问题描述:

我正在开发使用codeigniter框架开发的硬件商店的销售点。如何从Mysql和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 ;}?>

我控制器

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表

销售 enter image description here

付款

enter image description here

+0

更新'sales' ANB'payments'表的结构问题。 –

+0

@TouheedKhan,我用Mysql表更新了我的问题 – kikuyu1

您可以重复使用的新方法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; ?> 
+0

非常感谢您的帮助 – kikuyu1

如果您发布的salespayments表的答案一定会越来越准确。您可以使用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();