여러 테이블에서 자료 취합해서 보여주기 채택완료
안녕하세요.
검색을 해봐도 원하는 답을 얻을 수 없어 이렇게 질문 남기게 되었습니다.
제목 그대로 여러 테이블에서 자료를 가져와 한번에 보려고 합니다.
우선 아래처럼 소스를 구성했습니다.
</p>
<p><?php</p>
<p>$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 ";
</p>
<p>$result = sql_query($sql);
$j = 1;</p>
<p>for ($i=0; $row=sql_fetch_array($result); $i++)
{ ?></p>
<p> </p>
<p><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></p>
<p><?php $j++; } ?></p>
<p>
그누보드는 UNION 적용이 안된다고 해서 위 구문을 mysql~ 로 변경해봤지만
아무것도 출력되지 않네요.
쿼리문의 잘못인지 다른 방법이 있는건지 궁금합니다.
아울러 한 가지 더 질문드리고자 한다면,
위에 코드에서는 2개의 테이블에서 자료를 합쳐서 보여주는데,
각 자료들이 어느 테이블로부터 왔는지는 어떻게 알 수 있나요?
루프로 한 행의 값을 표시해줄 때, 그 값들이 어느 테이블로부터 온 값인지를
알 수 있는 방법을 알고 싶습니다.
그래서 위의 코드처럼 if문으로 구분을 해주려고 합니다.
고수님들의 소중한 답변 기다리겠습니다.
감사합니다.
답변 2개
기본적으로 union 을 사용못하게 막았으니 common.lib.php 내 union 찾아보면 알수 있을 겁니다
두번째 질문은 쿼리를 조금 수정하시거나 지금처럼 하시면 되겠죠 ^^
답변에 대한 댓글 4개
해당 쿼리만 특별히 실행되도록 하심이 좋겠네요 ^^
대표적인 공격방법인 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'] 값으로 구분 하시면 됩니다.
답변에 대한 댓글 1개
그런데 예시로 들어주신 방법을 정확하게 이해하지 못하겠습니다.
왜냐하면 예시에서는 'A' 라는 컬럼만 조회하는 형태인데
다중 컬럼을 조회하려면 이런식으로 하면 되는건가요
SELECT 'A' AS tmp_tp, 'B' AS order_no, 'C' AS invoice_no.....
아마도 컬럼명을 임의의 이름으로 '통일' 해주고
$row['xxx'] 형태로 뽑아내는 것 같은데
이걸 한 쿼리문으로 뽑아내는게 좀 어렵겠네요.
가능하시다면... 부연 설명을 좀 부탁드려도 될런지요?
감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
보안 상 위험하다고 해서 사실 좀 꺼림칙하긴 한데
방법을 못찾으면 위 방법으로라도 해야겠네요.
아무쪼록 소중한 답변 감사드립니다!