조인한 테이블 검색건수를 정확히 할려면요..

조인한 테이블 검색건수를 정확히 할려면요..

QA

조인한 테이블 검색건수를 정확히 할려면요..

본문

안녕하세요.


주문테이블 + 샵테이블 + 추가테이블

3개의 테이블을 left 조인해서 검색을 할때

----------------------------------------------------

$sql_from    = " from g5_shop_order a 

                 left join g5_shop_cart b on a.od_num = b.od_num

                 left join g5_add_table c on a.od_num = c.od_num  

    ";

$sql_common  = $sql_from . "  $sql_search "; //검색

 

$sql = " select count(a.od_num) as cnt " . $sql_common;

$row = sql_fetch($sql);

$total_count = $row['cnt'];

-----------------------------------------------------

$total_count 가 g5_shop_order 의 a.od_num의 갯수가 아니라  

g5_add_table c.od_num의 전체 수가 나오는데요.. 


left join -> right join으로도, count(a.od_num) -> count(b.od_num), count(c.od_num) 으로

변경 해봐도 전체수가 g5_add_table c.od_num의 갯수로 나와서

빈페이징이 나옵니다.

어떻게 해야 하나요?

감사합니다.

이 질문에 댓글 쓰기 :

답변 1

A,B,C 테이블이라고 할경우


A와 B 그리고 A와 C는 연결이 되었으나 B와 C가 연결이 되지 않은 상태에요.


즉, 원하는 결과값을 얻을 수 없다는 거죠


A와B를 연결하고 B와 C를 연결하는 구조가 되어야 원하는 결과를 얻을 수 있어요.


관계형으로 테이블 설계가  안되어 있다는 거죠.


즉, 디비 설계가 잘 못 되었다는 것을 의미하는 것이고요.


NULL이 나오는 데이터는 필요 없다면 NULL을 제외한 데이터를 출력해주면 되요


Where을 이용해야 해요. 그냥 left를 써서 왼쪽으로 붙이기만 하면 원하는 결과를 얻을 수 없어요.


위에 설명 했듯이 디비설계가 관계형으로 되어 있지 않기 때문이에요.


select * from A 

left join B on A.id = B.id 

left join C on A.id = C.id

where B.id is not null 


이런식으로  Null은 제거 해주거나 WHere에서 조건을 한번 더 만들어야 해요. 

네. 감사합니다.
where B.id is not null 이조건 넣으면 검색 결과가 아예 안나와요..

left join C를 빼고 검색하면 제대로 나오네요.
left join C도 검색을 해야 하는데..

left join C on A.id = C.id -> left join C on B.id = C.id 로 해도 안되고요..
B와 C를 연결 하려면 어떻게 하나요?

B를 is not null로 했는데 아무것도 안나오면 B가 데이터가 없는 거에요.

그런데 C를 빼고 하면 데이터가 나온다고 했잖아요.

left 조인은 왼쪽을 기준으로 출력하는 것이기 때문에 데이터는 무조건 나와요.

B와 A가 제대로 연결되었는지 확인 부터 해야 할 것 같은데요.

left 조인이 힘들면 내추럴 조인 하세요.
일반적인 조인으로요.

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

회원로그인

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