2013-06-29 3 views
0

int 배열을 저장해야합니다. 이제 제 문제는 꽤 많은 시간이 걸리는 작업이있어서 하나의 쿼리로 제한하고 싶습니다. 그 쿼리에서 배열에서 특정 int int 추가해야합니다.PHP 정수 배열 저장

특정 페이지에서 보낸 시간을 나타내는 타이머입니다. 현재는 같은 분야에있는 모든 페이지에 대한 카운트 단지 종합 창구, 그래서 나는 단지 $의 TOTALTIME 다음 마지막 검사 사이의 시간 차이 인 상태

UPDATE user SET active = active+$totaltime WHERE id=:id 

을해야한다. 이제는 특정 페이지를 별도로 저장하고 싶습니다. 문제는 정확히 얼마나 많은 페이지가 있을지 모른다는 것입니다. 나는 serialize을 사용하는 것에 대해 생각했지만 좋은 해결책처럼 보이지 않는 많은 시간에 2 번의 쿼리를 수행해야합니다.

다른 방법이 있습니까?

답변

1

필요한 것은 각 레벨의 각 사용자와 관련된 활성 시간을 추적하는 레벨에 대한 별도의 테이블입니다. 하나만있을 수 있기 때문에

userid INT 
levelid INT 
active INT 

기본 키가의 사용자 ID 및 열 leveid의 조합이어야한다 :

에는 다음과 같은 열이 userlevels 호출이 테이블을 수 있습니다, 그것을 제공 사용자와 레벨의 특정 조합에 대한 항목입니다. 사용자가 적이 경우이 테이블에 새 항목을 생성

INSERT INTO userlevels (userid,levelid,active) 
VALUES (:userid,:levelid,$totaltime) 
ON DUPLICATE KEY UPDATE active=active+$totaltime; 

: 사용자가 특정 레벨에 소요 된 시간을 업데이트 할 때

그런 다음 같은 것을 할 것 이전에 해당 레벨에 있거나 이미 항목이있는 경우 활성 시간을 추가합니다.

이것은 mysql 특정 구문이지만 다른 호출을 사용하는 다른 데이터베이스에서도 동일한 결과를 얻을 수 있습니다.

+0

내 표는 사용자 목록이며 각 사용자는 특정 게임의 각 단계에서 소비 한 시간을 어떻게 든 저장해야합니다. 나는 레벨 당 컬럼을 갖는 것이 꽤 어리 석다고 생각하지만, 하나의 필드에 여러 개의 값이 있거나, serialize 된 버전으로 저장되어 있거나, 하나의 필드에 여러 개의 값을 저장하고있는 경우, 단일 쿼리에서 값을 추가 할 수있는 방법을 모르겠습니다. 배열을 일반 텍스트로 사용하십시오. – jdepypere

+1

@arbitter 답변을 업데이트했습니다. –

+0

잔디를 깍는 동안 나는 똑같은 결론을 내었습니다. 별도의 DB가 실제로 최고 일 것입니다. 또한 쉽게 페이지 뷰를 통합하거나 시간이 기록 된 다른 페이지를 추가 할 수 있습니다. 감사! – jdepypere