레벨이 올랐을 때 한번 포인트 차감되는 php sql 짜는데 도움부탁드려요.
본문
일단 아래는 소스이구요.
<?
$dbconn = mysql_connect("localhost","judelaw5883","icesun79");
mysql_select_db("judelaw5883.price", $dbconn);
mysql_select_db("judelaw5883.g4_member", $dbconn);
$date=$_GET['date'];
$time=$_GET['time'];
$mcode=$_GET['mcode'];
$commision=$_GET['commision'];
$mb_id=$_GET['mb_id'];
$ip=$_GET['ip'];
mysql_query("insert into judelaw5883.price (date, time, mcode, commision, mb_id, ip) values ('{$date}','{$time}','{$mcode}','{$commision}','{$mb_id}','{$ip}')",$dbconn);
mysql_query("update judelaw5883.g4_member set mb_level = 3 where mb_id in
(select judelaw5883.price.mb_id from judelaw5883.price group by judelaw5883.price.mb_id having count(mb_id) >= 5)", $dbconn);
mysql_query("update judelaw5883.g4_member set mb_point = (mb_point + 1000) where mb_id in
(select judelaw5883.price.mb_id from judelaw5883.price group by judelaw5883.price.mb_id having count(mb_id) >= 1)", $dbconn);
?>
소스 설명을 드리면
A 서버에서 이벤트 발생시 제서버로
이렇게 보내줍니다. 그래서 db의 price 테이블에 해당 정보를 저장합니다.
이렇게 들어온 price 테이블을 가지고 그누보드의 g4_member 테이블의 해당 컬럼을 수정합니다.
한번 이벤트 발생한 mb_id 에게 1000 원의 포인트를주고 5번 이벤트가 발생한 mb_id 에게 회원레벨 3을 주게됩니다.
여기까지 위의 소스로 아주 잘 작동하고 있습니다.
제가 원하는건 이제 회원 레벨 3이 되었을 때 단 한번만 5000을 차감 해주고 싶어요.
제가 해보니 자꾸 회원레벨 3이되었을 때 5000원을 삭감하고 또 5000원이 모이면 또 삭감하게 됩니다.
소스 구조상 회원 레벨이 3이될 때 무조건 5000원인데,, 레벨 3을 주면서 단 한번만 5000원 차감을 하고 싶습니다.
차감되는 것 좀 부탁드립니다. 사진 파일을 설명드린 DB 구조입니다.
일단 생각하기론 g4_member 테이블에 identifier_lv3 식별자 컬럼을 줘서 모두 0 을주고, 한번 차감이 되면 1로 바꿔주고
차감시 identifier_lv3 값이 1일 땐 차감이 이루어 지지 않게 하면되겠는데 제가 php mysql 정말 초보라 문법이나 sql을
모르겠습니다 c라면 하겠는데요. ㅠ
일단 g4_member 테이블에 identifier_lv3 컬럼 넣어주고
select * from judelaw5883.g4_member where identifier_lv3 = true and ?????
여기까지가 한계입니다. 지금 sql php 책을 주문해놨는데,
그전에 해결하고 싶은데 도움좀 부탁드릴께요.
감사합니다. 건강조심하고 복받으세요~
!-->
답변 2
1. common.php를 include 하는 방법을 사용하면 코드가 한결 쉬워집니다
-- bbs폴더의 화일들 소스코드를 보세요
2. 17행에서 넘어온 아이디만 적용하는 것이 아니라 A서버에서 넘어 올때 마다
5번 이상 기록된 아이디 전체를 구해서 변경하는 코드라 제대로 된 프로그래밍이라 할 수 없습니다
3. 19행에서 g4_member 테이블에 포인트를 직접 넣는 것은 잘되는 것 같아보이지만 틀린 방법입니다
왜냐하면 해당 아이디가 다른 곳에서 포인트를 변경하는 일이 발생하면 저렇게 넣어둔 값은
없어져버립니다(그누보드의 실행 구조를 파악해야죠)
--g4_point테이블에 그누보드의 insert_point함수를 이용해서 넣어야 제대로 적용됩니다
4. 원하는 기능은 아래처럼 구현 하면 됩니다
1) price테이블 insert 후 g4_member테이블 여분필드에 횟수누적
update g4_member set mb_1=mb_1 +1
2) g4_member테이블에서 누적된 mb_1 값 추출
select mb_1 from g4_member where mb_id='$mb_id'
3) insert_point함수를 이용하여 1000포인트 적립
3) 2)에서 구한 mb_1 값이 5이면 레벨 3으로 변경 및 insert_point 이용 -5000 포인트 기록
-- 이렇게 하면 5번째 등록시 한번만 5천포인트 차감 됩니다
넹 고맙습니다. 말씀 잘들었습니다.