【问题标题】:checking availability between 2 dates not working检查 2 个日期之间的可用性不起作用
【发布时间】:2016-04-15 09:23:22
【问题描述】:

当您可以订购汽车时,我有一个订购页面。我有 2 个功能,1 个订购 1 个检查。

我的订单功能:

function reserveer($resvan,$restot,$autoid){
    $con = new Core();
    $con->connect();
    $sql = 'INSERT INTO reservering (resvan, restot,autoid) VALUES (?,?,?)';
    
    if ($stmt = $con->myconn->prepare($sql))
    {
        $stmt->bind_param('ssi', $resvan, $restot,$autoid);
        $stmt->execute();   
        $stmt->close();
    }
    else{
        die("errormessage: " . $con->myconn->error);
    }
}

我的检查功能:

function check($resvan, $restot,$autoid){
    $con = new Core();
    $con->connect();
    $errmsg = array();
    $sqlres = 'SELECT * FROM reservering WHERE resvan >= ? AND restot <= ? AND autoid=?';
    if($stmt = $con->myconn->prepare($sqlres)){
        $stmt->bind_param('ssi', $resvan, $restot,$autoid);
        $stmt->execute();
        $stmt->store_result();
    }
    if ($stmt->fetch()){
        $errmsg[] = "already exists!";
        return $errmsg;
    }
}

但我的代码有缺陷。当有人从 2001-01-01 到 2001-01-15 订购时,它会被正确插入。当有人从 2001-01-02 到 2001-01-14 订购时,它也会被插入。我认为这会奏效。我也尝试过 sql BETWEEN 但这也不起作用。

所以我的问题是,我怎样才能对此进行正确检查?我没有错误。

我的餐桌设置:

【问题讨论】:

  • 您在数据库表中的日期使用什么数据类型? (请不要说您使用的是 varchar)
  • 不,我正在使用日期@MarkBaker

标签: php mysqli pdo


【解决方案1】:

当有人从 2001-01-01 到 2001-01-15 订购时,它会被正确插入

我们有

resvan=2001-01-01
restot=2001-01-15

现在查看检查预订的查询

WHERE resvan >= ? AND restot <= ?

当有人从 2001-01-02 到 2001-01-14 订购时,它也会被插入

所以当这种情况发生时,你的查询就变成了

WHERE resvan >= 2001-01-02 AND restot <= 2001-01-14

这不会返回重复项,因为不存在这样的记录。您现有记录的日期是从 1 月 1 日开始,而不是从 1 月 2 日开始。

解决方案非常简单,您不想在已经预订的日期重复预订汽车,因此只需提供 1 个日期而不是两者都匹配。即使 1 场比赛不重新预订

WHERE (
2001-01-02 BETWEEN resvan AND restot
OR 2001-01-14 BETWEEN resvan AND restot
)
AND autoid=?

现在试试那些新日期

【讨论】:

  • 哦,是的,那是真的。但我该如何让它与众不同?有什么办法可以解决这个问题?
  • 它不能正常工作。它甚至给出了一个已经存在的日期,甚至没有预订。您仍然可以在 2 个日期之间进行预订。
  • 可能我需要一些睡眠,因为我有一种感觉,即使这个不准确:P
  • 我用这段代码有一段时间了,但今天我才意识到它有一个缺陷。如果有人在 02-03 到 02-03 订购了东西,但是如果有人从 02-02 到 02-04 订购,它说成功订购了?我该如何解决?它不应该对那些人可用。我似乎找不到解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2013-03-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多