채택완료

후기중복 방지관련

2020-02-10 (월) 18:20:09 3,343

/shop/itemuseform.php 파일에

// 사용후기 작성 설정에 따른 체크

check_itemuse_write($it_id, $member['mb_id']);

이 쿼리 아래에 해당 코드를 심어놓았습니다...

Copy
// 후기 중복 방지 200120
$sql = " select od_id from {$g5['g5_shop_cart_table']}
            where it_id = '$it_id'
                and mb_id = '{$member['mb_id']}'
                and ct_status = '완료'
                order by od_id desc ";
$row = sql_fetch($sql);

$od_id = $row['od_id']; // 완료처리된 내역중 최근 주문번호를 가져옴 200120


$use_sql = " select count(*) as cnt
                    from {$g5['g5_shop_cart_table']} a join {$g5['g5_shop_item_use_table']} b
                    where b.od_id = '$od_id'
                      and a.it_id = '$it_id'
                      and a.mb_id = '{$member['mb_id']}'
                      and a.ct_status = '완료' ";
$use_row = sql_fetch($use_sql);

if ( $use_row['cnt'] > 0 ){
    alert_close("후기는 주문당 한번만 작성 가능힙니다.");
}

후기를 작성하면 후기 테이블에 od_id 가 db에 담기게 해놓아서 od_id 1개당 후기도 1개만 등록 가능하게 했는데

2개의 제품을 한번에 주문하고 완료하고 나서 후기 작성할때 이슈가 생기네요;;

a b 2개의 제품을 구매하고 완료처리시킨뒤

a 제품에 후기를 작성하고 b 제품에도 후기를 달려고 하면 "후기는 주문당 한번만 작성 가능합니다." 라고 심어놓은 alert창이 뜨는데요;;

$ure_sql 쿼리를 보면 od_id, it_id, mb_id, ct_status ... 4개를 대조해서 count 를 불러오는데

a 제품에는 후기가 달렸으니 echo $use_row['cnt']; 해보면 1이 뜹니다.

그런데 b 제품에서도 1이 뜨는 이유를 알 수 있나요...??

위 코드의 쿼리도 제가 쿼리를 짤 줄은 몰라서 다른데 join 쓴 구문 가져와서 이곳에 물어가며 작성한건데요...

제 생각이 맞다면... b 제품에서는 후기테이블에 od_id, mb_id, ct_status는 같을지언정 등록된 it_id 값이 없으니... echo $use_row['cnt']; 를 했을 때는 0이 떠야 하는게 아닌가 싶은데...

어느 부분이 잘못된건지를 모르겠습니다..ㅠㅠㅠ;;

조언 주시면 감사하겠습니다ㅠㅠㅠ

답변 1개 / 댓글 3개

채택된 답변
+20 포인트

and b.it_id = '$it_id' 

위의 조건을 추가해보세요..
 

답변에 대한 댓글 3개

이제 확인했습니다.. 감사합니다! 잘 되네요~!!

알려주신 방법을 넣으니... a.it_id = '$it_id' and b.it_id = '$it_id' 가 되는데

반복되는 느낌이 들어서 저 2개를 묶거나, 아님 조건을 좀 더 확실하게(?) 걸 수는 없을까하는 마음에

join / left join 구글링 하면서 좀 더 보완(?) 해봤습니다...;;

a.it_id = '$it_id' 인것을 가져오되, on 절을 추가해서 a, b 의 it_id 가 같은게 불러와지게...(?) 해봤습니다;;

[code]
$use_sql = " select count(*) as cnt
from {$g5['g5_shop_cart_table']} a join {$g5['g5_shop_item_use_table']} b
on ( a.od_id = b.od_id )
where a.od_id = '$od_id'
and a.it_id = '$it_id'
and a.mb_id = '{$member['mb_id']}'
and a.ct_status = '완료' ";
[/code]
join 이 있었군요..
제가 알려드린 방법에서는 join은 삭제하고 위 구문을 추가해야 합니다.
from {$g5['g5_shop_cart_table']} a, {$g5['g5_shop_item_use_table']} b
@eyekiss 아... join 없이도 2개의 테이블의 데이터들을 가져올 수 있나보네요!! 2개 테이블 대조 로 구글링하니깐 join 문이 나와서 그거로 썼던거였는데... 좋은 정보 감사드립니다!!

답변을 작성하려면 로그인이 필요합니다.