게임 운영을 하다보면, 질의 결과를 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;
'게임을 만들자 > 게임 서버(C#)' 카테고리의 다른 글
c# ibatis Mapper에서 <,>,<=,>= 비교연산자 사용 (0) | 2020.04.08 |
---|---|
c# 다각형 충돌체크 (0) | 2020.02.21 |
Mysql, Percentage 질의 구현하기 (0) | 2020.02.01 |
게임 서버 DB설계 시, Tips (0) | 2020.01.30 |
c# 싱글톤 제네릭 클래스 (0) | 2020.01.07 |