php - 从日期范围之间的 mysql 表列中选择

标签 php mysql

我正在尝试从某个日期之间的表中选择多个时间项,但我认为我遇到了时间戳/日期时间转换问题。

首先,我的 log_table MySQL 表中存储的记录是以 DATETIME 数据类型存储的,以后我可以使用 strtotime() 结果作为我的 SELECT 子句中的日期范围?

其次,我是否可以从 log_date 列中的日期之间的 log_time 列中SELECT,而不会无意中选择我的 log_date 专栏?截至目前,我返回了一个空数组。

PHP 脚本

$date = date("Y-m-d");
$date1 = str_replace('-', '/', $date);
$from_date = date('m-d-Y',strtotime($date1 . "-15 days"));

$date = date("Y-m-d");
$date1 = str_replace('-', '/', $date);
$to_date = date('m-d-Y',strtotime($date1));

$sql2 = "SELECT log_time FROM log_table WHERE log_date >= $from_date AND log_date < $to_date";
$query = $this->db->prepare($sql2);
$query->execute();
$Pro1 = $query->fetchAll();
$Pro1 = array_reverse($Pro1);

print "<pre>";
print_r($from_date);
print "</pre>";

最佳答案

您正在做一些非常奇怪的事情,试图让您的日期格式正确。比如,为什么指定一个格式为Y-m-d的数据,在下一行转过来,通过字符串替换转换为Y/m/d?这很奇怪。

我会提出一些建议:

首先,熟悉 PHP DateTimeDateInterval 和相关类。这些确实是为处理日期而提供的最有用的工具。

其次,如果您的 MySQL 数据库列是日期列,您必须使用 Y-m-d 格式,因为这是该列类型的预期格式。

使用日期时间的例子:

$date = new DateTime();
$to_date = $date->format('Y-m-d');
$date->modify('-15 days');
$from_date = $date->format('Y-m-d');

就是这样。这就是获取数据库查询格式的两个日期所需的全部内容。

第三,您需要引用查询中使用的日期字符串。没有这个,您将得到无效的语法。

$sql2 = "SELECT log_time FROM log_table WHERE log_date >= '$from_date' AND log_date < '$to_date'";

第四,您实际上应该检查 prepare()execute() 等的结果,以确保您获得所需的行为并记录错误,以便你可以更好地理解任何问题。

$query = $this->db->prepare($sql2);
if (false === $query) {
    // something went wrong get error message and log it here
} else {
    $result = $query->execute();
    if (false === $result) {
        // the query failed log an error message
    } else {
        // fetch your data
    }
}

第五,由于您正在经历使用准备语句的麻烦,您可能需要考虑使用参数化准备语句(这是一个好习惯),尽管在这种情况下没有令人信服的安全理由,因为您控制了所有查询输入。

第六,为什么要对返回的数组使用array_reverse()?这里应该注意 array_reverse() 绝对不保证任何特定的顺序,因为您的查询,如所写,不保证任何特定的顺序。如果您希望数据按特定顺序排列,只需使用 ORDER BY 子句在查询中应用排序。目前,您只是简单地颠倒无序结果集的顺序,这是不必要的。注意:为了优化查询,您需要对排序中使用的所有字段建立索引。

例如:

$sql2 = "SELECT log_time FROM log_table WHERE log_date >= '$from_date' AND log_date < '$to_date' ORDER BY log_date DESC, log_time DESC";

关于php - 从日期范围之间的 mysql 表列中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188800/

相关文章:

php - 如何因不活动而注销用户

php - 从php中的图像读取地理标签数据

php - 将变体价格添加到 Woocommerce 中的可变产品下拉项目名称中

php - mysql Pdo 不会按名称排序

mysql - 将 perl 数组返回给 MATLAB

sql - 使用查询进行渐进计数?

PHP MYSQL 搜索最佳结果

mysql - 在 SQL 中组合具有不同属性和大小的表

mysql - 如何构建 MySQL 查询以获取具有所有选定功能的产品?

mysql - 组合两个查询(子查询)时遇到问题