상점 ID와 플레이어 ID, 플레이어 포인트가 포함 된 테이블이 있습니다. What I want to do is transfer points from a shop to the other, the thing is that shop id and players id form a unique index. What I want to do is on duplicate key update, instead of let it fail, to add the points of one entry to the other and delete the "from" entry. 다음과 같은 것 :
UPDATE `playerspoints`
SET `boardId`=$to
WHERE `boardId`=$from
ON DUPLICATE KEY UPDATE `points`=.... get the idea?
해결 방법
필요한 것은 잔액에서 더하기와 빼기를 기록한 다음 수동으로 또는 트리거를 사용하여 표로 만드는 간단한 원장입니다.
예를 들어 가장 간단한 방법은 다음과 같습니다.
INSERT INTO points_adjustments (boardId_from, boardId_to, points)
VALUES (?, ?, ?)
이것은 한 쌍의 항목으로 더 쉽게 표시 될 수 있습니다.
INSERT INTO points_adjustments (boardId, points)
VALUES (?, ?)
+ n 포인트에 대해 하나의 항목을 추가하고 -n에 대해 일치하는 항목을 추가합니다. 언제든지 SUM (포인트)
을 사용하여 잔액을 얻을 수 있습니다. 이를 VIEW
로 래핑하여 검색을 더 쉽게 만들거나 원하는 경우 트리거를 사용하여 합계를 다른 테이블의 열로 비정규화할 수 있습니다.
간단한 트리거는 영향을받는 각 boardId
에 대해 다음 문을 발행합니다.
INSERT INTO balances (boardId, points) VALUES (?, ?)
ON DUPLICATE KEY SET points=points+VALUES(points)
이는 처음에 키 충돌을 방지하고 발생한 트랜잭션에 대한 감사 가능한 기록을 제공합니다.
어쨌든이 모든 작업을 자동으로 수행하려면 트리거를 사용해야합니다.
참조 페이지 https://stackoverflow.com/questions/13466647
'MySql' 카테고리의 다른 글
MySQL DATETIME 지난 2 시간 동안 행 선택 (0) | 2021.01.19 |
---|---|
MySQL DELIMITER // 트리거에서 무엇을합니까? (0) | 2021.01.19 |
MySQL에서 빈 값을 허용하는 고유 한 제약 (0) | 2021.01.19 |
MySQL mysqli_query와 mysqli_real_query의 차이점 (0) | 2021.01.19 |
MySQL 잘리는 MySQL 텍스트 열 (0) | 2021.01.19 |
댓글