여러 테이블에서 자료 취합해서 보여주기

여러 테이블에서 자료 취합해서 보여주기

QA

여러 테이블에서 자료 취합해서 보여주기

본문

안녕하세요.

검색을 해봐도 원하는 답을 얻을 수 없어 이렇게 질문 남기게 되었습니다.

 

제목 그대로 여러 테이블에서 자료를 가져와 한번에 보려고 합니다.

우선 아래처럼 소스를 구성했습니다.


<?php
$sql = " SELECT  order_no,invoice_no,release_date,order_date,op_name,payment_price,purchase_quantity,receive_name,receive_tel,address,delivery_memo FROM owlhouse_order_coupang ";
$sql .= "UNION ALL";
$sql .= " SELECT order_no,invoice_no,invoice_regist_date,payment_date,op_name,purchase_price,purchase_quantity,receive_name,receive_tel,address,delivery_memo FROM owlhouse_order_tmon ";
       
$result = sql_query($sql);
$j = 1;
for ($i=0; $row=sql_fetch_array($result); $i++)
{ ?>
 
<tr>
  <td><?php echo $j;?></td>
  <td><?php if ($row['invoice_no'] == "") { echo "배송전"; } else { echo "배송완료"; }?></td>
  <td><?php if ($table_result == "owlhouse_order_coupang") { echo "쿠팡"; } elseif ($table_result == "owlhouse_order_tmon") { echo "티몬"; }?></td>
  <td><?php echo $row['order_no'];?></td>
  <td><?php echo $row['order_date'];?></td>
  <td><?php echo $row['op_name'];?></td>
  <td><?php echo $row['purchase_quantity'];?></td>
  <td><?php echo $row['payment_price'];?></td>
  <td><?php echo $row['receive_name'];?></td>
  <td><?php echo $row['receive_tel'];?></td>
  <td><?php echo $row['address'];?></td>
  <td><?php echo $row['delivery_memo'];?></td>
  <td><?php echo $row['release_date'];?></td>
  <td><?php echo $row['invoice_no'];?></td>
  <td><button class="btn btn-primary btn-sm">수정</button></td>
</tr>
<?php $j++; } ?>

 

그누보드는 UNION 적용이 안된다고 해서 위 구문을 mysql~ 로 변경해봤지만

아무것도 출력되지 않네요.

쿼리문의 잘못인지 다른 방법이 있는건지 궁금합니다.

 

아울러 한 가지 더 질문드리고자 한다면,

위에 코드에서는 2개의 테이블에서 자료를 합쳐서 보여주는데,

각 자료들이 어느 테이블로부터 왔는지는 어떻게 알 수 있나요?

 

루프로 한 행의 값을 표시해줄 때, 그 값들이 어느 테이블로부터 온 값인지를

알 수 있는 방법을 알고 싶습니다.

그래서 위의 코드처럼 if문으로 구분을 해주려고 합니다.

 

고수님들의 소중한 답변 기다리겠습니다.

감사합니다.

이 질문에 댓글 쓰기 :

답변 2

기본적으로 union 을 사용못하게 막았으니 common.lib.php 내 union 찾아보면 알수 있을 겁니다

두번째 질문은 쿼리를 조금 수정하시거나 지금처럼 하시면 되겠죠 ^^

common.lib.php 에서 union 부분을 주석처리 하니까 바로 되긴 하네요.
보안 상 위험하다고 해서 사실 좀 꺼림칙하긴 한데
방법을 못찾으면 위 방법으로라도 해야겠네요.
아무쪼록 소중한 답변 감사드립니다!

보안 문제가 걱정된다면 common.lib.php 에서 sql_query 버젼을 두개 만들던가 파라미터를 하나 더 두던가 해서
해당 쿼리만 특별히 실행되도록 하심이 좋겠네요 ^^

대표적인 공격방법인 sql injection 대비 방법이긴 한데 그것도 완벽하진 않아서요 ㅋㅋ

님 설명을 제대로 이해 못하셨군요
일단 union 이 된다고 할때
다른 쿼리는 그대로 두고
select "coupang" as order_table ... 이하 그대로
union all
select "tmon" as order_table .. 이하 그대로

쿼리를 날리고 row['order_table'] 의 값으로 조정하는 방법을 말씀하신 겁니다.

컬럼명은 어차피 컬럼갯수가 동일하다면 처음 쿼리의 컬럼명으로 조회됩니다.

쿼리로 조회 하실때 간단히 구분자를 포함해서 조회 하시면 됩니다.
A테이블  : SELECT 'A' AS tmp_tp,  order_no, .....
B테이블  : SELECT 'B' AS tmp_tp,  order_no, .....
이런식으로 추가 하셔서 

조회된 데이터에서 $row['tmp_tp'] 값으로 구분 하시면 됩니다.

아 이런 방법이 있었군요!!
그런데 예시로 들어주신 방법을 정확하게 이해하지 못하겠습니다.

왜냐하면 예시에서는 'A' 라는 컬럼만 조회하는 형태인데
다중 컬럼을 조회하려면 이런식으로 하면 되는건가요

SELECT 'A' AS tmp_tp, 'B' AS order_no, 'C' AS invoice_no.....

아마도 컬럼명을 임의의 이름으로 '통일' 해주고
$row['xxx'] 형태로 뽑아내는 것 같은데

이걸 한 쿼리문으로 뽑아내는게 좀 어렵겠네요.
가능하시다면... 부연 설명을 좀 부탁드려도 될런지요?

감사합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 14
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT