사용가능한 쿠폰갯수 확인하기
본문
쿼리를 보니 현재는
$sql = " select cp_id, cp_type, cp_price, cp_trunc, cp_minimum, cp_maximum
from {$g5['g5_shop_coupon_table']}
where cp_id = '{$_POST['sc_cp_id']}'
and mb_id IN ( '{$member['mb_id']}', '전체회원' )
and cp_start <= '".G5_TIME_YMD."'
and cp_end >= '".G5_TIME_YMD."';
이렇게 사용한 쿠폰 구분을 따로 하지 않고 쿼리문 돌린후에
is_used_coupon($member['mb_id'], $cp['cp_id']);
함수로 for 문 안에서 사용한 쿠폰인지 구분하는걸로 확인됩니다.
저는 위에 커리에서 애초에 사용이 된 쿠폰을 제외한 하나의 쿼리를 만들고 싶습니다.
함수안에서 $sql = " select count(*) as cnt from {$g5['g5_shop_coupon_log_table']} where mb_id = '$mb_id' and cp_id = '$cp_id' "; 해당 쿼리로 사용한 쿠폰인지 확인하던데 저 두 쿼리를 하나로 만드는 방법은 없을까요?
답변 4
inner join이 아니네요.
left join으로 해 보세요.
$sql = " select A.cp_id, A.cp_type, A.cp_price, A.cp_trunc, A.cp_minimum, A.cp_maximum
from {$g5['g5_shop_coupon_table']} A
inner join {$g5['g5_shop_coupon_log_table']} B
on A.mb_id=B.mb_id and A.cp_id=B.cp_id
where B.mb_id is null
and A.cp_id = '{$_POST['sc_cp_id']}'
and A.mb_id IN ( '{$member['mb_id']}', '전체회원' )
and A.cp_start <= '".G5_TIME_YMD."'
and A.cp_end >= '".G5_TIME_YMD."';
영카트 설계상 문제가 좀 있어보이네요.
쿠폰 사용한 건지 아닌지를 매번 로그를 비교해서 체크하는 건 너무 비효율적 아닌가요...
쿠폰 자체에 is_used 필드 하나 추가해서 사용하면 체크하는 정도로 하면 훨씬 나을 텐데요.
g5_shop_coupon 에 추가해서 ...
직접 수정하여 사용하는 걸 일단은 추천드리고요. 앞으로 영카트에서 이렇게 버전업해주면 좋겠네요
영카트가 쿠폰뿐만 아니라 페이지 로딩할때 쿼리를 비효율적으로 호출하는게 많네요..
설계를 바꾸시면서 하는것도 나쁘지 않아 보입니다.