我有以下代码,它似乎没有产生预期的结果:
$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();
这可能是一个愚蠢的错误..但我发现很难确定我何时不确定选择语句BETWEEN和使用的日期是否是有效的MYSQL事件。
任何帮助都会很棒。我一直在搜索,我正在做的事似乎是正确的,因此混乱。
已编辑//
我在date_from和date_to日期之间做了很多评论,并且在通知表中没有通知(不存在部分)......所以基本上,我应该得到大约25条评论...相反,我只得到一条评论返回日期为2012-05-29 00:23:39
已编辑//
是不是因为你只能比较日期和日期......以及时间到一个时间?我怎么能适应mysql才能做到这一点?
已编辑//
它确定了功能之间的错误。我真的不确定它到底出了什么问题。
已编辑// 问题已经解决了。它与查询无关,因此可以肯定地说这是正确的方法。我以疯狂的方式完成了我的日期范围。谢谢你们所有人的帮助!!!!
答案 0 :(得分:0)
在MySQL Documentation中声明,在使用日期或时间值时,您应该使用CAST,因此您应该按如下方式编写查询。
WHERE e.created BETWEEN CAST("' . $date_from . '" AS DATETIME) AND CAST("' . $date_to . '" AS DATETIME) ...
如果您没有得到期望的结果,这可能会解决您的问题。
答案 1 :(得分:0)
我遇到了同样的问题,我想你可能想要应用这个解决方案:
$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处理它