我很难同时处理这两个查询。我的数据库里有一些日期。我只想选择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);