2014-01-22 27 views
2

後,我有MySQL表:PHP插入MySQL的30分鐘

table

,我想補充下一行(從頁面腳本)與價值觀:

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 

問題:如何確定在mysql查詢中是否只插入如果是最後一個插入帶有相同的標識符(IP +瀏覽器+平臺)是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 

日期算術有很多這樣的選擇。

1

您可以此爲指標:

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

-I've取代timeNOW()爲當前時間,但您可能希望從你最後time價值來算。

它會選擇記錄是什麼比30分鐘更新,因此,如果它是肯定的,那麼你不需要插入新的行。

+0

-1我從上次計算,因爲它不是從訪問中插入30分鐘,而是在上次訪問後30分鐘 –

+0

這是一張支票。如果我對你有所瞭解,你需要檢查這些記錄是否存在。因此,「存在超過30分鐘的記錄」等於「記錄,其中時間大於當前時間--30分鐘」。可能是我錯過了使用說明:如果上面的'COUNT'是正數,那麼_do not_ insert rows –

+0

我錯過了對面(<)字符...你是對的 –

0

你可以只篩選SELECTINSERT

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 

現在,清楚,語法也不會精確地工作,但你的想法。如果time不是30MIN或更多,則它會將0記錄返回到INSERT

這將避免首先執行COUNTEXISTS的需要;它可以在一個聲明中完成。