2014-01-22 2 views
2

후 MySQL을 삽입PHP 내가 MySQL의 테이블이 30 분

ip:    178.40.12.36 
time:   2014-01-22 14:08:04 
browser:   Google Chrome 
browser_version: 32.0.1700.76 
platform:  windows 
country:   Slovakia 

질문 : 정확히 동일한 식별자 (IP + 브라우저 + 플랫폼)를 가진삽입 할 mysql 쿼리를 결정하는 방법 은 30 분 전에되었다?

나의 현재 삽입 (의사 코드) :

$exist = SELECT * 
     FROM table 
     WHERE ip = $ip 
     AND browser = $browser 
     AND platform = $platform 

if(!$exist) { 
    INSERT INTO table ... 
} 

내 아이디어 :

$exist = SELECT ... 
     ... 
     AND time < $time - 30MIN 

참고 : 어떻게 MySQL은이를 작성하려면?

+0

일치하는 레코드가 * 30 분 미만 * 일 수 있도록 '시간'기준을 만드십시오. 그런 다음 아무 것도 반환되지 않으면 새 레코드를 추가하는 방법을 알게됩니다. –

답변

0

예, 쉽습니다.

AND time > NOW() - INTERVAL 30 MINUTE 

날짜 계산에는 많은 선택 항목이 있습니다.

SELECT 
    COUNT(1) 
    FROM `t` 
    WHERE `ip` = '$ip' 
    AND `browser` = '$browser' 
    AND `platform` = '$platform' 
    AND `time`>NOW() - INTERVAL 30 MINUTE 

빨리가 현재 시간을 NOW()time 교체,하지만 당신은 당신의 마지막 time 값에서 계산하실 수 있습니다 :

1

당신은 지표로 사용할 수 있습니다.

레코드가 30 분 이상인 레코드를 선택하므로, 양수인 경우 새 행을 삽입 할 필요가 없습니다.

INSERT INTO `Table` (...) 
SELECT $ip, $time, $browser, $browser_version, $platform, $country 
FROM `Other_Table` 
WHERE ip = $ip AND browser = $browser AND platform = $platform AND 
    time < $time - 30MIN 

지금, 명확하게 구문을 정확히 작동하지 않습니다,하지만 당신은 아이디어를 얻을 :

+0

-1 방문으로부터 30 분을 마지막으로 방문한 후 30 분을 삽입하지 않기 때문에 지난 번부터 계산합니다. –

+0

수표입니다. 내가 너를 올바르게 찾았 으면 그런 기록이 있는지 확인해야 해. 따라서 "30 분 이상인 레코드는"현재 레코드보다 30 분 이상 큰 레코드입니다. 내가 사용법 설명을 놓쳤을 수도 있습니다 : 위의 'COUNT'이 양수이면 _do not_ 행을 삽입하십시오 –

+0

반대 문자 (<)를 놓쳤습니다 ... 당신이 맞습니다 –

0

당신은 방금 INSERT에 대한 SELECT를 필터링 할 수 있습니다. time30MIN 이상이 아닌 경우 0 레코드를 INSERT으로 반환합니다.

이렇게하면 COUNT 또는 EXISTS을 먼저 수행 할 필요가 없습니다. 한 문장으로 끝낼 수 있습니다.

관련 문제