SQL / PHP - query for DATEDIFF


SQL / PHP - query for DATEDIFF

我很难同时处理这两个查询。我的数据库里有一些日期。我只想选择3天(或更短)的日期。日期的格式如下:2015-12-26 01:32:52

例如,如果我有今年4月的东西:2015-04-26 01:32:52,那么它显然不应该被选中。我只想选择过去3天的日期。但什么也没发生。我不知道我做错了什么。我不应该用分号分隔查询吗?

$sql = "UPDATE users
            SET newdatecolumn = 
            STR_TO_DATE(SUBSTRING_INDEX(REPLACE(lastlogin,char(160),' '),'C',1), '%b %d %Y, %T'); 
            SELECT * FROM users
            WHERE DATEDIFF(DAY,'2015-12-26 00:59:34', newdatecolumn) <= 3
            ";

此外。。。。如何获取当前日期?这个日期CCD_ 3只是一个例子。我想数一下newdatecolumn是多少天前。我尝试添加GETDATE(),但仍然没有任何效果。

我需要运行这个UPDATE查询。没有它,newdatecolumn将无法工作。在选择数据

之前,我必须这样做

您必须进行单独的调用,因为您有两个查询。你不能在单个调用中用分号分隔它们。如果你是要同时获取日期和时间,请尝试CURRENT_TIMESTAMP或规范函数NOW()。

尝试使用区间语法:

... WHERE datecolumn >= (NOW() - INTERVAL 3 DAY)

我想你想要这个:(你不需要一个新列)

// this will select all data from users where the last_login  is less than 3 days
SELECT * 
FROM users
WHERE TIMESTAMPDIFF(DAY,last_login,NOW()) <= 3;

如果你不在乎时间,只在乎日期,请使用这个(而不是)

SELECT * 
FROM users
WHERE TIMESTAMPDIFF(DAY,DATE_FORMAT(last_login,'%Y-%m-%d'),DATE_FORMAT(NOW(),'%Y-%m-%d')) <= 3;

我不是mysqli,但PDO,不确定mysqli_multi_query函数是否会自动返回最后一行集

但在PDO中,它应该像一样运行

 <?php
$pdo = new PDO('mysql:dbname=something;host=127.0.0.1;port=3306','user','password');
$stmt = $pdo->prepare('
        UPDATE users
        SET newdatecolumn =
        STR_TO_DATE(SUBSTRING_INDEX(REPLACE(lastlogin,char(160),'' ''),''C'',1), ''%b %d %Y, %T'');
        SELECT * FROM users
        WHERE DATEDIFF(DAY,''2015-12-26 00:59:34'', newdatecolumn) <= 3;
        ');
$stmt->execute();
// it allow you to retrieve the data from the second statement
$stmt->nextRowset();
while($user = $stmt->fetch())
{
    // do something
}
unset($stmt);
unset($pdo);