자식분류값만 물려있는 제품과 부모분류값으로 발급된 카테고리할인쿠폰... 사용가능하게 하려면

자식분류값만 물려있는 제품과 부모분류값으로 발급된 카테고리할인쿠폰... 사용가능하게 하려면

QA

자식분류값만 물려있는 제품과 부모분류값으로 발급된 카테고리할인쿠폰... 사용가능하게 하려면

본문

10 전체 - 1010 1차카테고리(총 8개) - 101010 2차 카테고리(...) - 10101010 3차 카테고리(...)

 

10에 속한 카테고리만 150개가 넘습니다.....

 

분류가 이렇게 세팅되어있는 상태에서

 

2차 카테고리 또는 3차 카테고리가 최하위분류로 설정이 되어있습니다.

 

그리고 각 상품들은 기본분류(ca_id)에 자신이 속한 최하위분류로 지정해놓은 상태인데요.

 

쿠폰을 카테고리 할인으로 1010 으로 발급을 했는데 사용하질 못하고 있습니다...;;

 

카테고리 할인을 1010으로 발급하고 1010에 속한 모든 카테고리의 상품들중에서 쿠폰이 사용 가능할 줄 알았는데.. 이게 보니까 꼭 쿠폰발급할때 적용한 카테고리id값을 상품이 물고 있어야하는거 같은데요...;;

 

상품도 2천개가량 되고... 2차분류(ca_id2)를 카테고리할인 적용시키기 위해서만 사용하려고...

카테고리할인할때 적용 id값(cp_target)이 달라질때마다 쿠폰적용시킬 상품들을 찾아서 2차분류(ca_id2) 설정을 카테고리할인에 적용된 분류id값(cp_target)으로 설정해줘야한다는건데... 너무 번거로울거 같아서

 

1010 으로 카테고리할인쿠폰이 발급되면 1010이 속한 하위카테고리들까지 적용되게하려면 

어떻게 해야하나요...??

 

orderform.sub.php 파일 안에서 쿠폰 출력해오는 부분


// 쿠폰 불러오는 부분 $sql문의 일부
( cp_method = '1' and ( cp_target IN ( '{$row['ca_id']}', '{$row['ca_id2']}', '{$row['ca_id3']}' ) ) )

cp_target 이 상품이 물고있는 ca_id ~ 3 이 중에 target과 같은 값이 있으면 쿠폰이 출력되게 하는거 같은데...

 

1. cp_target의 strlen을 구하고

2. 앞에서 구한 cp_target의 길이만큼 앞에서부터 ca_id 값을 잘라내서

3. 똑같으면 쿠폰 출력...

 

이런 로직이면 카테고리할인 쿠폰 발급시 자식카테고리의 상품들도 쿠폰이 사용가능하지 않을까싶은데...

머리로는 로직을 생각하겠는데 구현은 어렵네요ㅠㅠㅠ

 

개발자는 아니지만... 영카트로만 커스텀하고 있어서 어느정도 php에서 if문으로 조건걸어서 거르고 for문으로 루프돌리고 이런정도는 하겠는데... sql문 짜는건 아직 버겁네요ㅠㅠㅠ

 

ps. 일단 현 상황에서 해결방안에 대해서 생각해봤습니다.

전제는 1010에 속한 모든 상품을 할인하고 싶은 경우...

1. 카테고리할인쿠폰은 1010으로 발급하고, 상품관리에서 2차분류(ca_id2)에 1010을 물린다. (노가다성)

2. 카테고리할인쿠폰을 1010이 포함된 최하위분류 값으로 1010을 포함하는 최하위분류 개수만큼 만든다. (노가다성)

3. 카테고리할인쿠폰은 1010으로 발급하고, 주문서작성시 해당 제품의 ca_id 값이 앞 4자리가 1010을 포함하는 경우 출력시킨다. (개발 필요)

 

개발없이 가려면... 운영하는 사람이 힘든 방법밖에 없네요;;

이 질문에 댓글 쓰기 :

답변 3

생각을 잘못했던 것 같습니다.

 

정정하여 다시 올립니다.

 

1) 쿠폰 출력해오는 sql 문은 원래대로 돌리고..

( cp_method = '1' and ( cp_target IN ( '{$row['ca_id']}', '{$row['ca_id2']}', '{$row['ca_id3']}' ) ) )

 

2) 해당 sql 문 바로 전에 다음의 구문을 넣어주면 될 것 같습니다.

$row['ca_id'] = substr($row['ca_id'], 0, 4);
$row['ca_id2'] = substr($row['ca_id2'], 0, 4);
$row['ca_id3'] = substr($row['ca_id3'], 0, 4);

아! 감사합니다!! 알려주신 방법에서 조금 업그레이드?? 시키면 될 것 같네요!!

제가 예시로 1010으로 말씀드려서 4자리로만 잘라서 알려주신거 같아서 조금 생각을 해봤습니다!

1. 원래대로 돌리고

2. sql 전에 cp_method = '1' 인 쿠폰들을 불러오고 cp_target 의 len?(길이)를 구해서 $row['ca_id'] = substr($row['ca_id'], 0, cp_target의 길이); 로 세팅을 해놓으면


카테고리 쿠폰 생성시 101010 으로 생성하던, 1010 으로 생성하던 생성된 자손카테고리는 모두 적용시킬 수 있을 것 같습니다!!

덕분에 머리가 좀 돌아가진거 같습니다!! 감사합니다~!

음... 알려주신 방법을 토대로 짜봤는데요... 그래도 출력이 안되네요ㅠㅠㅠ

적용소스


$sql = " select cp_target
                            from {$g5['g5_shop_coupon_table']}
                            where mb_id IN ( '{$member['mb_id']}', '전체회원' )
                              and cp_start <= '".G5_TIME_YMD."'
                              and cp_end >= '".G5_TIME_YMD."'
                              and cp_method = '1' ";
                $len = sql_fetch($sql);

                $targetLen = strlen($len['cp_target']); // cp_target의 길이
                $match1 = substr($row['ca_id'], 0, $targetLen);
                $match2 = substr($row['ca_id2'], 0, $targetLen);
                $match3 = substr($row['ca_id3'], 0, $targetLen);

                $sql = " select cp_id
                            from {$g5['g5_shop_coupon_table']}
                            where mb_id IN ( '{$member['mb_id']}', '전체회원' )
                              and cp_start <= '".G5_TIME_YMD."'
                              and cp_end >= '".G5_TIME_YMD."'
                              and cp_minimum <= '$sell_price'
                              and (
                                    ( cp_method = '0' and cp_target = '{$row['it_id']}' )
                                    OR
                                    ( cp_method = '1' and ( cp_target IN ( '{$match1}', '{$match2}', '{$match3}' ) ) )
                                  ) ";


$sql 출력결과값

         select cp_id
                            from g5_shop_coupon
                            where mb_id IN ( 'test', '전체회원' )
                              and cp_start <= '2020-09-04'
                              and cp_end >= '2020-09-04'
                              and cp_minimum <= '12000'
                              and (
                                    ( cp_method = '0' and cp_target = '1596699260' )
                                    OR
                                    ( cp_method = '1' and ( cp_target IN ( '1010', '', '4020' ) ) )
                                  ) 
        



일단 저 방법에서 이슈는... cp_target의 길이를 구하는 곳에서 그냥 모든 카테고리 쿠폰을 불러올거 같은데...

ca_id와 매칭시켜서 ca_id 에 cp_target 값이 포함되어 있다는 전제를 넣어줘야

제대로 쿠폰을 불러올 거 같은 느낌이라... 그 부분을 수정해보고 있습니다...

일단 해보고 안되면... 그냥 2차분류에 1010 카테고리를 물리는 방법을 써보는 수밖에 없겠네요...;;ㅠㅠㅠㅠ

( cp_method = '1' and ( cp_target like '{$row['ca_id']}%' ) )

 

또는

 

( cp_method = '1' and ( cp_target like '{$row['ca_id']}%' or cp_target like '{$row['ca_id2']}%' or cp_target like '{$row['ca_id3']}%') )

 

답변 감사드립니다!!

그런데 출력이 되질 않네요...ㅠㅠ


$sql = " select cp_id
                            from {$g5['g5_shop_coupon_table']}
                            where mb_id IN ( '{$member['mb_id']}', '전체회원' )
                              and cp_start <= '".G5_TIME_YMD."'
                              and cp_end >= '".G5_TIME_YMD."'
                              and cp_minimum <= '$sell_price'
                              and (
                                    ( cp_method = '0' and cp_target = '{$row['it_id']}' )
                                    OR
                                    ( cp_method = '1' and ( cp_target like '{$row['ca_id']}%' or cp_target like '{$row['ca_id2']}%' or cp_target like '{$row['ca_id3']}%' ) )
                                  ) ";
$res = sql_query($sql);

print_r($sql);

// print_r 출력결과
         select cp_id
                            from g5_shop_coupon
                            where mb_id IN ( 'test', '전체회원' )
                              and cp_start <= '2020-09-03'
                              and cp_end >= '2020-09-03'
                              and cp_minimum <= '19000'
                              and (
                                    ( cp_method = '0' and cp_target = '1596699265' )
                                    OR
                                    ( cp_method = '1' and ( cp_target like '10102020%' or cp_target like '%' or cp_target like '4020%' ) )
                                  ) 


알려주신 방법으로 입력했는데 안돼서 () or () or () 로도 바꿔보고 오타도 확인해봤는데
나오질 않네요...ㅠㅠ

카테고리할인 쿠폰은 1010 으로 test 계정에만 발급되어있는 상태입니다.

발급된 개별쿠폰은 잘 나오는데 카테고리 할인은 안나오네요ㅠㅠㅠㅠ

최근에 유사한 작업을 진행하게 되었는데요..
 
검색하다보니, 제가 작성한 지금의 글을 보게 되었고..
 
당시의 저의 답이 맞지 않음을 알게 되었습니다.
 
새로 방법을 찾았고,
 
팁글로 올렸습니다. https://sir.kr/yc5_tip/1837

답변을 작성하시기 전에 로그인 해주세요.
전체 2

회원로그인

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