mysql根据时间戳检查今天是否存在uid记录,否则执行插入操作

时间:2013-05-22 11:09:56

标签: php mysql sql

我试图做一个mysql检查,如果今天根据$ timestamp存在来自$ uid的记录,如果它没有,则执行INSERT。

//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());
        }

显然我正在使用SQL部分进行查找 - 我想知道是否有一些内置的SQL函数来执行此操作或类似操作?

4 个答案:

答案 0 :(得分:1)

检查您是否在过去24小时内投票:

SELECT * 
FROM vote 
WHERE vote_fb_uid = '$this->fb_uid'
AND   FROM_UNIXTIME(vote_time) >= DATE_SUB(NOW(), INTERVAL 1 DAY)

如果你想限制在同一天(意味着你可以在2013.05.21 23:55和2013.05.22 00:05发布)

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

答案 1 :(得分:0)

CURDATE()

以“YYYY-MM-DD”或YYYYMMDD格式返回当前日期,具体取决于函数是在字符串还是数字上下文中使用。

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

答案 2 :(得分: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";
    }

答案 3 :(得分: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)