게임 운영을 하다보면, 질의 결과를 Update해야 하는 경우가 있다. 이때 문제는 Mysql과 다른 db 프레임워크의 질의 방법이 다르다.

 

1. 일반적인 Update문

 일반적인 Update문은 아래와 같은 방식을 아래와 같은 방식이다.

 

UPDATE 
    [테이블명]
SET
    [필드명 = 새로운 값]
WHERE
    [조건문]

 

 

2. Select 결과와 Join

 앞서 말한 것 처럼, Mysql과 다른 DB프레임워크의 방식이 다르다.

 

Mssql 버전

UPDATE 
    [테이블A]
SET
    [테이블A].필드 = [테이블B].필드
FROM
    [테이블A],[테이블B]
WHERE 
    [테이블A].id = [테이블B].id

 

Mysql 버전

UPDATE
    [테이블A],[Select 질의] B
SET
    [테이블A].필드 = B.필드
WHERE
	[테이블A].id = B.id

 

오라클 버전

UPDATE
	[테이블A] A
SET 
    A.필드 = [SELECT B.필드 FROM 테이블B B WHERE B.id = ###]
WHERE A.id = ###;

 

아래는 Mysql에서, 실제 시즌 랭킹의 상위 %별로, 그 점수를 유저의 재화로 UPDATE하고 있는 예제이다.

UPDATE 
	UserMoney as um,
	(SELECT user_id, curr  FROM
		(SELECT
		    id as user_id,
		    @prev := @curr as prev,
		    @curr := point as curr,
		    @rank := IF(@prev > @curr, @rank+@ties, @rank) AS rank,
		    (@rank/@total)*100 as percentrank
		FROM
			(SELECT * FROM UserPoint WHERE season = 3) c,
			(SELECT
					@curr := null,
			        @prev := null,
			        @rank := 0,
			        @ties := 1,
			        @total := count(*) from UserPoint where play_count > 10 and season = 3) b
		ORDER BY
		    point DESC ) a 
		WHERE percentrank >= 0 AND percentrank <= 1) d

SET 
	um.energy = d.curr
	
WHERE um.id = d.user_id;
물약을 지니리

댓글을 달아 주세요

  1. 감사돌이

    감사해요 ! 사랑해요 ! :)) 최고!!!