2017-04-26 1 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; 
 
    }

어떻게이 두 테이블을 결합 하는가?

나는이 질문에 대해 충분히 명확 해지기를 바란다. 나는 구글에 도전하려했지만 운이 없다.

어떤 도움을 주셔서 감사합니다. 감사합니다

편집

MYSQL 테이블

판매 enter image description here

지불

enter image description here

+0

업데이트 질문입니다. –

+0

@ TouheedKhan, 내 질문을 MySQL 데이터베이스 테이블로 업데이트했습니다. – kikuyu1

답변

1

당신은이 개 결과를 결합하는 새로운 방법 getSalesWithPayments()에서 주어진 방법 getSales()getPayments()을 다시 사용할 수 있습니다 판매에 아직 지불이없는 경우) id 열에 의해 색인화 된 $sales 배열을 채 웁니다. 이렇게하면 값 비싼 검색을하지 않아도 ID로 판매에 쉽게 액세스 할 수 있습니다.

두 번째 루프에서 지불을 해당 판매에 할당합니다.

빈 결과를 처리하는 논리를 추가해야 할 수도 있습니다 (빈 배열을 반환하려는 경우에만 필요하지는 않음). 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(); 
관련 문제