나는 이것을 일반적으로 재사용 할 수 있도록 제공하려고 노력할 것입니다.MySQL : 존재하지 않는 데이터에 대한 자리 표시자를 사용하여 요약 테이블 초기화
꽤 큰 MySQL 데이터베이스가있는 사이트를 실행 중입니다. 일부 요약/롤업 테이블을 초기화해야합니다. 예를 들어 축구 통계라고합시다. 같은 데이터베이스에서 여러 개의 축구 리그를 다루기 때문에 많은 사람들이 서로 다른 길이의 게임을합니다. 예를 들어, 실내 축구 리그는 4 분의 1을 뛰는 반면 대부분의 야외 리그는 반으로 재생됩니다.
이 연습에서 중요한 세 개의 테이블이 있습니다. 나는 내가 찾고있는 대답에 대해 중요하지 않다고 생각하는 모든 분야를 수정했다.
GAME
`game`.id
`game`.home_team_id
`game`.away_team_id
`game`.number_of_periods
GOAL
// Records for each goal scored in the game
`goal`.id
`goal`.game_id
`goal`.team_id
`goal`.period_number
`goal`.player_id
`goal`.assist_player_id
PERIOD_SUMMARY
`period`.id
`period`.game_id
`period`.team_id
`period`.number
`period`.goals_scored
궁극적으로 목표 점수가 매겨 졌는지 여부에 관계없이 기간 요약 테이블에서 재생되는 모든 기간에 대한 기록이 있어야합니다. 이 테이블은 게임 생성시 트리거를 통해 적절한 0으로 채워진 레코드를 추가하고 삽입/업데이트 요청시 발동하여 period_summary 테이블을 업데이트하는 것이 매우 쉽기 때문에 한 번만 초기화하면됩니다.
목표를 모두 그룹화하고 SUM()을 사용하여 기간 요약 테이블을 초기화하는 것은 상당히 쉽습니다. 돈이없는 기간을 "채우는"효율적인 방법을 찾는 데 어려움이 있습니다. '는 t는 목표는 0
으로 득점이 내가 알아 내기가 더 효율적인/쉽게 경우입니다하려고 :
- 트리거를 작성하고 0으로 채워진 값으로 전체 period_summary 테이블을 미리 기입 그런 다음 이미 알고있는 쿼리를 실행하여 목표가 채점 된 기간 동안 해당 레코드를 업데이트하십시오.
- 목표 테이블에 일치하지 않는 레코드 만 0으로 채우는 다른 방법 (임시 저장 프로 시저일까요?)을 사용하십시오.
죄송합니다. 내 설명이 원래 질문에서 혼동 스러울 수 있습니다. 요약 테이블은 아직 존재하지 않으며이 실습의 주요 목표는 데이터로 해당 테이블을 초기화하는 것입니다. 목표가 채점되지 않은 경기 (과거에는)에서 플레이 한 모든 기간에 대해 "0"레코드를 생성해야합니다. – AvatarKava
그래, 내 요점은, "초기화"할 필요가 없다는 것이다. 기간이 끝난 후 데이터가 있으면 레코드를 추가하십시오. – tpdi
나는 이미 플레이 된 게임의 데이터로 테이블을 채우는 것을 의미한다고 말하면서. – AvatarKava