Php 两个datetime列之间的Mysql
我有以下代码,但似乎没有产生预期的结果:Php 两个datetime列之间的Mysql,php,mysql,datetime,between,Php,Mysql,Datetime,Between,我有以下代码,但似乎没有产生预期的结果: $date_from = '2012-04-27 18:19:33'; $date_to = '2012-05-29 00:59:57'; $database->connect(); $ancestors = mysql_query(' SELECT * FROM ' . $database->db_prefix . 'comments e WHERE e.creat
$date_from = '2012-04-27 18:19:33';
$date_to = '2012-05-29 00:59:57';
$database->connect();
$ancestors = mysql_query('
SELECT * FROM ' . $database->db_prefix . 'comments e
WHERE e.created BETWEEN "' . $date_from . '" AND "' . $date_to . '" AND
e.ancestors = "' . $comment["id"] . '" AND e.user_id != "' . $user->user_object["id"] . '" AND
NOT EXISTS
(
SELECT null
FROM ' . $database->db_prefix . 'notifications d
WHERE d.target_id = e.id
)
ORDER BY e.created DESC
', $database->connection_handle);
$database->close();
这可能是个愚蠢的错误。。但是,当我不确定select语句和使用的日期之间是否有效时,我发现很难确定
任何帮助都会很好。我一直在搜索,我所做的似乎是正确的,因此混淆
编辑//
我在date_from和date_to日期之间有很多评论,通知表中没有通知(不存在部分)。。。所以基本上,我应该得到大约25条回复。。。相反,我只收到一条回复,日期为2012-05-29 00:23:39
编辑//
是因为你只能比较一个日期和一个日期吗。。一次又一次?为了做到这一点,我应该如何调整mysql
编辑//
这显然是函数之间出了问题。我真的不确定它到底出了什么问题
WHERE e.created BETWEEN CAST("' . $date_from . '" AS DATETIME) AND CAST("' . $date_to . '" AS DATETIME) ...
如果您在这段时间内没有得到预期的结果,这可能会解决您的问题。我遇到了相同的问题,我认为您可能需要应用此解决方案:
$from = $_GET['from'];
$to = $_GET['to'];
include("connect.php");
$link=Connection();
$query = "SELECT * FROM records WHERE date_time BETWEEN '$from' AND '$to'";
$result=mysql_query($query,$link);
$list = array();
if($result === FALSE) {
echo "No data";
}
这里的诀窍是单引号,您需要将变量放入该引号中,让mysql处理它您的代码生成了什么结果?你期望得到什么样的结果?您的MySQL数据库中创建的
e.created
字段的格式是什么?您为什么需要CAST
?您可以让PHP为您进行转换;通常,CAST
应用于数据库中已有的字段:)如下所示:)是的,测试我自己,这似乎没有什么区别,我不知道为什么文档中会说CAST是推荐的。我已经尝试过WHERE e.created>=“.$date\u from.”和e.created在这种情况下,我通常只运行查询而不使用WHERE语句,然后一个接一个地添加不同的部分,以确保它按照我的预期进行过滤。因此,只需在where语句中指定日期部分,而不指定其他部分,然后添加其他部分。您可能会发现where语句中的一个部分与您实际尝试筛选的内容不符。我很确定这会导致性能差异。。。没有强制转换,它是一个字符串比较,但有强制转换,它是一个数字比较。但是,至少在日期格式下,您会得到相同的结果。