【问题标题】:Select from database where date is less than a supplied date从日期小于提供日期的数据库中选择
【发布时间】:2016-07-19 17:58:15
【问题描述】:

我正在尝试从日期在当前日期两周内的数据库中提取行,我正在使用 CodeIgniter,这是我的模型:

function GetToDoItems($userID)
{
  $range = date('Y-m-d', strtotime("+2 weeks"));
  $query = $this->db->query("SELECT * FROM FYP_Milestones
                            INNER JOIN FYP_Modules ON FYP_Milestones.ModuleID = FYP_Modules.ID
                            WHERE FYP_Milestones.MilestoneDue < $range
                            ORDER BY FYP_Milestones.MilestoneDue ASC
                            ");
  return $query->result();
}

它运行这个查询:

SELECT * FROM FYP_Milestones INNER JOIN FYP_Modules ON FYP_Milestones.ModuleID = FYP_Modules.ID WHERE FYP_Milestones.MilestoneDue < 2016-04-14 ORDER BY FYP_Milestones.MilestoneDue ASC

我在数据库中有这样的一行:

考虑到 2016-04-07 比 2016-04-14 少 7 天,我希望仅拉出该行,但 SQL 返回一个空结果,为什么这是案例?

【问题讨论】:

    标签: php mysql codeigniter date


    【解决方案1】:

    为日期值添加单引号,例如:

    $query = $this->db->query("SELECT * FROM FYP_Milestones
                            INNER JOIN FYP_Modules ON FYP_Milestones.ModuleID = FYP_Modules.ID
                            WHERE FYP_Milestones.MilestoneDue < '".$range."'
                            ORDER BY FYP_Milestones.MilestoneDue ASC
                            ");
    

    【讨论】:

      【解决方案2】:

      你实际上不需要 PHP 的范围,使用 SQL:

      WHERE FYP_Milestones.MilestoneDue < (CURDATE() + INTERVAL 2 WEEK)   
      

      【讨论】:

      • 这样比在 PHP 中更快更有意义
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2019-11-14
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      相关资源
      最近更新 更多