2012-02-20 2 views
2

사용자가 시스템에 로그인하는 일 수 (예 : stackexchange)를 세는 것이 일반적입니다. LAST_DATE가 현재 날짜가 number_of_day=number_of_day+1와 일수를 업데이트 할 수 last_login 다른 확인하기 위해 무엇이 최선인지 datetime로그인 일 수를 계산하는 MySQL 쿼리

입니다 일반 사용자 테이블에서, 나는

UPDATE users SET 
last_login='date', number_of_login=number_of_login + 1, number_of_days=? 
WHERE user_id='user_id' 

로 로그인 정보를 업데이트합니다.

나는 마음에 두 가지 방법이 있지만 순진한 것 같다 :

방법 1 : SELECT있는 것은 LAST_LOGIN 잡아

PHP

에 현재 날짜와 방법 2를 비교 : 트릭 등을 사용을 sub-SELECT

(가능한 경우) 하나의 간단한 쿼리로이 작업을 수행하겠습니다.

답변

1

의견을 잘못 입력하지 않으면 last_login을 항상 업데이트하고 싶지만 last_login! = curdate() 인 경우 number_of_days 만 업데이트하고 싶습니다. 이것을 시도하십시오 :

UPDATE users SET 
number_of_days = if (last_login = curdate(), number_of_days, number_of_days + 1), 
last_login='date', number_of_login = number_of_login + 1 
WHERE user_id='user_id' 
+0

WHERE 절은 전체 업데이트를 중지합니다. 하지만 우리는 last_login을 기록해야합니다 (오늘 또는 여러 번 처음 로그인했는지 여부) – Googlebot

+0

좋아, 답을 업데이트했습니다. 이 시간이 맞다면 알려주세요. :) –

+0

감사합니다. 이것은 정확히 내가 의미했던 것입니다 :) – Googlebot

2

DATEDIFFMySql 기능 : http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff을 사용합니다.

DATEDIFF는()은 expr1을 반환 - expr2이 다른 하나 날짜에서 일의 값으로 표현 . expr1 및 expr2는 날짜 또는 날짜 및 시간입니다. 표현입니다. 값의 날짜 부분 만 계산에 사용됩니다.

결과를 가져온 후 가져온 열이 0보다 큰지 확인하여 날짜가 다른지 확인해야합니다.

관련 문제