2012-01-19 3 views
4

사용자가 사이트를 방문했습니다. 사용자는 여러 가지 다른 작업을 수행 할 수 있습니다. 사용자가 해당 작업을 수행하는 횟수를 계산하는 카운터가 필요합니다. 문제는 하루에 시작되며 하루에 시작된다는 것입니다. 그래서이 모델은, 아이디, 사용자, 액션, 시간, 날짜가MySQL - 존재하지 않을 경우 열 값 증가 또는 데이터 삽입

내가 이것을 사용하고 싶습니다,하지만 난 액션은 키가 아닌 수 없기 때문에, 그리고 수 없습니다. 다른 필드 중 어느 것도 키가 될 수 없습니다.

insert into useractions (user, action, times) values (2, 3, 1) 
on duplicate key update times = times + 1; 

답변

2

조치를 삽입 할 때 카운터 값을 계산하고 싶습니까?

+--------+----------+---------------------+ 
| UserID | ActionID | Time    | 
+--------+----------+---------------------+ 
|  1 |  1 | 2012-01-19 14:47:03 | 
|  1 |  2 | 2012-01-19 14:48:12 | 
|  1 |  3 | 2012-01-19 14:48:15 | 
|  2 |  1 | 2012-01-19 14:49:33 | 
|  2 |  1 | 2012-01-18 14:49:42 | 

그리고 쿼리와 매일 탈리을 계산 : 단순히과 같이, 타임 스탬프와 사용자의 트랙과 행동을 유지하는 것이 더 간단 할 수있다 당신은 밖으로 데이터 열을 왼쪽

SELECT UserID, 
     ActionID, 
     DATE(Time) AS Date, 
     COUNT(*) AS n 
FROM actions 
GROUP BY UserID,ActionID,Date 
ORDER BY Date,UserID,ActionID; 

+--------+----------+------------+---+ 
| UserID | ActionID | Date  | n | 
+--------+----------+------------+---+ 
|  1 |  2 | 2012-01-17 | 2 | 
|  1 |  3 | 2012-01-17 | 2 | 
|  3 |  2 | 2012-01-17 | 6 | 
|  1 |  1 | 2012-01-18 | 1 | 
|  1 |  2 | 2012-01-18 | 1 | 
|  1 |  3 | 2012-01-18 | 4 | 
+0

나중에 난 그냥 사용자가 20 페이지를 방문 할 생각하고 병에 20 페이지가 :

alter table useractions add unique index unique_idx (user,action,date); 

그리고 (날짜 열을 추가하는) 당신의 DML : 여기

는 DDL이다 사용자 당, 다소 커질 수 있습니다. –

0

열의 조합에 대해 고유 키를 사용할 수 있습니다. 그렇게하면 해당 조합 (사용자, 작업, 날짜)을 고유하게 만들 수 있으며 그러면 쿼리가 작동합니다.

정말 쉬운 솔루션입니다. 테이블을 변경하려면 권한이 필요합니다.

5

귀하의 삽입 예를 들어,하지만 당신은 그것을 여러 번 언급 그래서 나는 그것이 존재한다고 가정합니다. 또한, 실제 날짜 (시간 소인 또는 날짜 시간이 아님)라고 가정합니다.

(user, action, date)에 고유 색인을 추가하면 검색어가 작동합니다. ...

insert into useractions (user, action, times, date) values (2, 3, 1, current_date()) 
on duplicate key update times = times + 1; 
관련 문제