조인한 테이블 검색건수를 정확히 할려면요..
본문
안녕하세요.
주문테이블 + 샵테이블 + 추가테이블
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에서 조건을 한번 더 만들어야 해요.