2010-11-23 5 views
0

설명을 단순화하기 위해이 설명을 사용하여 비유 할 것입니다.작업을 순서대로 그룹화하십시오.

게임에서 Archers와 Cavalry를 생산할 수있는 건물이 있다고 가정합니다. 당신은 5 명의 궁수와 3 명의 기병대에 대한 명령을 내린 다음 추가로 4 명의 궁수를 주문합니다.

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT 
`buildingid` INT UNSIGNED NOT NULL 
`unit` ENUM('Archer','Cavalry') NOT NULL 
`complete` TIMESTAMP NOT NULL 

가 지금은 주문 큐의 단위를 표시하려면 :

이 예를 들어

내가 가진 MySQL의 테이블이 있습니다. 이 작풍의 대부분의 게임은 선에 5 개의 궁수, 3 개의 기갑 부대 및 다른 4 개의 궁수를 간단하게 표시 할 것이다. 하지만 큐의 길이에 대한 제한을 원하지 않기 때문에, 이것은 더 큰 명령 (예를 들어, 200 궁)에 대해 매우 지저분 할 수 있습니다.

나는 MySQL 반환 buildingid, unit, count, next을 갖고 싶습니다. "count "는 단위 수이고"다음 "은 완료 될 가장 빠른 단위의 시간 소인입니다.

나는 GROUP BY 쿼리를 사용할 수 있지만 그 사이의 기병대에 관계없이 모든 아처를 그룹화합니다. 단위 유형별로 그룹화하는 방법이 필요합니다. 연속 된 항목으로 제한됩니다.

제가 이전에 시도한이 시도는 1000 단위를 테스트 할 때 서버가 완전히 작동하지만 완전히 작동하지 않았습니다. 나는 내가 충분히 명확하게 할 노력하고있어 설명 희망

...

+0

이전 검색어를 게시하십시오. 아마도 인덱스를 추가하기 만하면됩니다. –

+0

글쎄, 약 1 년 전부터 시도해 보았을 때, 코드가 너무 나빠서 지금 생각하고있는 것을 이해할 수 없다 ... 그러나 일반적인 생각은 "가장 낮은 ID로 작업을 얻는다. , 그 다음에 첫 번째 과제를 얻지 못합니다. ", 끝까지 도달 할 때까지 반복 ... 아니면 어떤 것. 와우, 코딩은 1 년 전에 빨려 들었습니다. o_O –

+0

그래, 그 당시 나는 인덱스에 대해 몰랐다. 그래서 그것은 아마도 문제의 유일한 원인 일 것이다! –

답변

0

정답은 "수량"필드를 추가하여 데이터베이스에 그룹화하는 것입니다. 시간에 이르면 수량을 하나씩 줄이고 다음 완료 시간을 위해 타이머를 다시 설정하거나 수량이 0이면 행을 삭제하십시오.

관련 문제