2012-10-29 2 views
1

내 응용 프로그램에는 레코드 추적 용 테이블과 특정 페이지에서 개별 페이지 뷰를 추적하는 테이블이 있습니다. 각 페이지 뷰 이벤트는 레코드를 내 Views 테이블에 기록하도록 트리거합니다.다른 쿼리 결과가 포함 된 표에 삽입/업데이트

통계를 계산하기 위해, 나는이 뷰의 수를 집계하고 record_id로 그룹화하여 별도의 테이블에 저장하려고하는 cron 작업을 가지고 있습니다.

다음 삽입 쿼리를 실행하면 잘 작동합니다.

insert into Details (record_id, views) 
(select record_id, count(id) from Views where 1 group by record_id) 

불행히도이 기능은 삽입하는 경우에만 작동하며 삽입/업데이트에 대한 적절한 쿼리를 작성하는 데 어려움이 있습니다. On Duplicate Key Update을 사용해 보았지만 기존 쿼리를 사용하여 작업하는 방법을 알아낼 수 없습니다. 대안을 피하기 위해 PHP에서 스크립트를 작성하고 가능하면 개별 쿼리를 실행하는 것이 좋습니다. 여기

내 테이블 정의입니다 :

Views 
id (int) PK 
record_id (int) 
created_at (date) 

Details 
record_id (int) PK 
views (int) 

참고 : 또한, 미래에, 나는 그래서 자르기 및 재 실행, 다른 통계를 표현하기 위해 정보 테이블에 더 많은 열을 추가하는 계획입니다 위의 원래 삽입 쿼리를 실행하는 것은 실제로 실행 가능한 솔루션이 아닙니다.

+0

요약에서 1 단계로 record_id를 삭제 한 다음 삽입을 다시 실행하는 방법은 무엇입니까? – Randy

+0

그게 가능하지만, 계획은 다른 집계 통계를 나타 내기 위해 세부 테이블에 더 많은 열을 추가하는 것입니다. 그래서 나는 완벽하게 작동하는 – nageeb

답변

2

그냥 마지막에 추가 :이 작업을 수행하려면

insert into Details (record_id, views) 
(select record_id, count(id) from Views group by record_id) 
on duplicate key update views = values(views); 

record_id는하지만, 고유해야합니다.

+0

인서트를 노리고 있습니다. 내 문제는 쿼리의 "뷰 업데이트 = 값 (보기)"부분에있었습니다. 감사! – nageeb

관련 문제