2017-04-26 12 views
5

codeigniterフレームワークを使用して開発したハードウェアショップの販売時点で作業しています。MysqlとCodeigniterの2つのテーブルからデータを取得する方法

私は

enter image description here

下の写真の私は販売と支払いある2つのテーブルを持っているように、アカウントの明細書を思い付くしたい、私はそのように、この二つのテーブルからデータを取得したいです特定の顧客の口座情報を生成することができます。

これは、顧客が現金またはクレジットベースで購入したすべての商品を見ることができ、日付別にお支払いした金額を表示できるので役立ちます。

また、お支払い額を計算することもできます。

私は以下のコードを使用して(販売と支払い)別々にリストすることができ、それによって支払う金額を計算することができます。

販売

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

どのように私は、この2つのテーブルを結合するのですか?

私はこの質問で十分明確であることを願っています。私はGoogleに挑戦してきましたが、私は運がありません。

私は何か助けていただきありがとうございます。おかげ

編集

MySQLテーブル

販売 enter image description here

支払い

enter image description here

+0

更新質問。 –

+0

@TouheedKhan、私はMysqlテーブルで質問を更新しました – kikuyu1

答えて

1

次の2つの結果を結合するための新しい方法getSalesWithPayments()内の指定されたメソッドgetSales()getPayments()を再利用することができます売り上げにまだ支払いがない場合)id列でインデックスされた$sales配列に値を設定します。これにより、高価な検索をすることなく、IDで簡単に売ることができます。

2番目のループでは、支払いを対応する販売に割り当てます。

空の結果を処理するロジックを追加する必要があることに注意してください(FALSEの代わりに空の配列を返すだけの場合は不要です)。あなたは今のようにそれを使用することができます

..

コントローラー:

$this->data['sales'] = $this->customers_model->getSalesWithPayments($id); 

ビュー: `sales` ANB` payments`テーブルの構造と

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

これを試してみてください:ため(あなたが$sale->paymentを初期化する最初のループでは

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

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