2013-05-22 38 views
0

我試圖做一個mysql檢查$ uid是否存在從現在開始的基於$ timestamp的記錄,如果它沒有執行INSERT。mysql根據時間戳檢查今天是否存在uid記錄否則做一個插入

//EXAMPLE RECORD FROM TABLE VOTE 
--- #vote_fb_uid# --- #vote_time# 
    665414807  1369219044 

TJT

//STEP 1 - do a look up on $uid and check with timestamp $today 

     $timestamp = $this->time; 
     $date = date('Y-m-d', $timestamp); 
     $today = date('Y-m-d'); 

     $sql = " 
     SELECT * FROM vote WHERE 
     vote_fb_uid = '$this->fb_uid', 
     WHERE vote_time = '$CHECK_IF_THERE_IS_AN_ENTRY_FROM_TODAY'"; 

     $res = mysql_query($sql) or die(mysql_error()); 

//STEP 2 - If no records are found for today - then we do an INSERT 

     if($no_record_for_today) { 
      $sql = sprintf(" 
      INSERT INTO vote(
      vote_fb_uid, 
      vote_time) 
      VALUES ('%s','%s')", 
      mysql_real_escape_string($this->fb_uid), 
      mysql_real_escape_string($this->time)); 

      $res = mysql_query($sql) or die(mysql_error()); 
     } 

顯然IM strugling與SQL部分的查找 - 我想知道是否心不是一些內置SQL函數來做到這一點或類似的?

+0

是的。它被稱爲REPLACE – Robert

+0

你稱之爲「今天」:過去24小時?同樣的dd.mm.yyyy? –

回答

1

來檢查,如果你有在過去的24小時投票:

SELECT * 
FROM vote 
WHERE vote_fb_uid = '$this->fb_uid' 
AND FROM_UNIXTIME(vote_time) >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
如果你想限制的同一天(意味着你被允許張貼在2013年5月21日23:55

和2013年5月22日00:05)

SELECT * 
FROM vote 
WHERE vote_fb_uid = '$this->fb_uid' 
AND DATE(FROM_UNIXTIME(vote_time)) = DATE(NOW()) 
+0

嗨拉斐爾 - 這將是在今天的框架內還是在實際要求的24小時內?至少期待檢查今天的框架 – user1231561

+0

@ user1231561第一個版本是在過去的24小時內,第二個相同的「日期」(平均值爲日 - 月 - 年) –

+0

嗨拉斐爾 - 謝謝你回到我的額外信息。 不知道爲什麼,但似乎無法與您的第二個查詢得到任何結果。我從現在開始添加了帶有時間戳的記錄(vote_time = 1369231486) - 但是沒有結果出現 - 有什麼想法? – user1231561

0

CURDATE()

返回當前日期在「YYYY-MM-DD」取決於函數是否用在字符串或數字語境中使用的值或YYYYMMDD格式。

mysql> SELECT CURDATE(); 
     -> '2008-06-13' 
mysql> SELECT CURDATE() + 0; 
     -> 20080613 
0

試試這個:

$today = date('Y-m-d'); //change it to timestamp if you want in timestamp 
$sql = " 
     SELECT count(*) as total FROM vote WHERE 
     vote_fb_uid = '$this->fb_uid' and 
     vote_time = '$today'"; 

     $res = mysql_query($sql) or die(mysql_error()); 


     if($res[0]['total'] < 1){ 
       $sql = sprintf(" 
      INSERT INTO vote(
      vote_fb_uid, 
      vote_time) 
      VALUES ('%s','%s')", 
      mysql_real_escape_string($this->fb_uid), 
      mysql_real_escape_string($this->time)); 

      $res = mysql_query($sql) or die(mysql_error()); 
      } else{ 
     //return error("custom","","Already Inserted.");  
     echo "already inserted"; 
    } 
+0

您好Veekay - 猜測SELECT計數查詢需要更改爲上面提到的一些解決方案 - 因爲vote_time ='$ today'「或者vote_time ='$ timestamp'」真的不會自己檢查時間間隔是否從今天開始? – user1231561

+0

@ user1231561 yes ..如果數據庫上的日期列具有「Y-m-d」格式,則不需要更改,但是如果它具有時間戳數據類型,則需要更改。 –

+0

嘿,再次 - 它存儲爲unix時間戳 – user1231561

0

$sql查詢有一個語法錯誤,你已經使用兩次條款WHERE正確語法使用在使用AND加入他們兩個或兩個以上的條款,只得到記錄至極沒有一個條目今天您可以使用DATE_SUB,間隔1天

SELECT * 
FROM vote 
WHERE vote_fb_uid = '$this->fb_uid', 
AND vote_time <= DATE_SUB(vote_time, INTERVAL 1 DAY) 
相關問題