2017-04-26 326 views
5

我正在開發使用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

回答

1

您可以重複使用的新方法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

0

如果您發佈的salespayments表的答案一定會越來越準確。您可以使用MySQL Join從2個表中獲取組合數據。

0

試試這個:

$this->db->select('*') 
      ->from('sales') 
      ->join('payments', 'payments.sales_id = sales.id', 'right') 
      ->where(array('sales.customer_id' => $id)); 
$results = $this->db->get(); 
相關問題