겨울팥죽 여름빙수

게임 운영을 하다보면, 질의 결과를 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;
profile

겨울팥죽 여름빙수

@여름빙수

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!