특정조건의 포인트내역 삭제방법 문의
본문
안녕하세요.
회원가입할때 생기는 포인트 외에 다른 내역이 없는 회원들의 포인트를 삭제하고 싶습니다.
처음에는 DB에서 직접
SELECT *
FROM `g5_point`
GROUP BY mb_id
HAVING count(mb_id) = 1
이런 식으로 검색해서 나온 결과를 몽땅 삭제해주었더니
g5_member 쪽의 mb_point쪽이 변화가 없더라구요.
아차! 싶었죠 ㅠㅠ
뭐 당연한 결과이죠..
그래서 일단은 원래대로 복구해놓고
이번엔 관리자화면 포인트 내역에서 삭제하면 되겠다 싶어서
제가 원하는 내역을 출력하기 위해 /adm/point_list.php에서
포인트내역을 불러오는 쿼리를 위와 똑같이 수정했더니
원래 갯수보다 너무 많이 나와버리니 이것도 아닌것 같고ㅠㅠ
요점은 포인트내역 갯수가 1개뿐인 회원들의
포인트내역삭제와 함께 member테이블의 mb_point에도 반영할 수 있는 좋은 방법이 있는지 도움을 구합니다.
감사합니다.
답변 2
SELECT * FROM `g5_point` GROUP BY mb_id HAVING count(mb_id) = 1
이것도 가능합니다만
bbs/"register_form_update.php"를 보면
// 회원가입 포인트 부여
insert_point($mb_id, $config['cf_register_point'], '회원가입 축하', '@member', $mb_id, '회원가입');
이렇게 되어 있습니다.
우선은 회원 가입 포인트만 고르고
select a.* from g5_point a left join g5_point b on a.mb_id=b.mb_id and a.po_id < b.po_id where a.po_rel_table='@member' and b.po_id is null;
g5_member.mb_point에서 차감하면 되겠네요.
update ( select a.* from g5_point a left join g5_point b on a.mb_id=b.mb_id and a.po_id < b.po_id where a.po_rel_table='@member' and b.po_id is null ) a inner join g5_member b on a.mb_id=b.mb_id
set b.mb_point=b.mb_point-a.po_point
그리고 회원 가입 포인트을 삭제하면 되겠네요.
delete a from g5_point a left join g5_point b on a.mb_id=b.mb_id and a.po_id < b.po_id where a.po_rel_table='@member' and b.po_id is null;
꼭 백업 후에 시도해 보세요.