【问题标题】:how to check if an entry exists between two dates如何检查两个日期之间是否存在条目
【发布时间】:2019-11-29 22:39:27
【问题描述】:

我有一个 sql 表“flights”,其中包含所有航班的所有详细信息:飞机登记、到达日期、出发日期等等...... 现在,当我想创建一个新航班时,我想检查两个给定日期之间是否已经存在具有相同注册的航班。 EG:有一个名为 IFLY 的航班于 2019 年 7 月 22 日抵达并于 2019 年 7 月 25 日起飞,现在如果我尝试创建另一个具有相同注册但于 23/7/2019 抵达并于 2019 年 7 月 24 日起飞的航班,我会喜欢在数据库中检查在这些日期期间另一个具有相同注册的航班已经在数据库中并提醒用户。

我尝试过这样的事情: 通过 jquery/ajax 在 DB 上调用请求的 html 表单

$regist = $_POST['regCreate'];
$arrivalDate = $_POST['adof'];
$departureDate =$_POST['ddof'];

$sql = "SELECT reg FROM flights WHERE reg = '$regist' AND (adof or ddof) 
 >= '$arrivalDate' AND (adof or ddof) <= '$departureDate'  ";//
$data = mysqli_query($conn, $sql);

 if (mysqli_num_rows($data) > 0) {
  echo 'exists';
 }

此代码不起作用,因为如果我创建一个位于已创建的两个日期之间的新航班不会给我例外结果。

【问题讨论】:

  • 您的架构是什么样的?你能举一个结果的例子吗?
  • 不要在 SQL 语句中直接使用$_POST 值,可能会导致 SQL 注入。转义它们或使用准备好的语句。

标签: php jquery sql


【解决方案1】:

如果两个时间段都在另一个结束之前开始,则它们会重叠。

你可以这样表述:

SELECT f.reg
FROM flights f
WHERE f.reg = ? and
      f.departureDate < ? and  -- the input arrival date
      f.arrivalDate > ?        -- the input departure date

请注意,我将语法更改为使用参数。这是在 PHP 或任何其他应用程序层中设计查询时的最佳实践。

【讨论】:

  • 不是那样工作的,我想在创建新航班 ARR 23 和 DEP 24 时检查 7 月 22 日至 25 日之间是否存在航班。它应该说“具有相同细节的航班似乎已经在这些日期存在”
  • @Scunja 。 . .这会将这些时期识别为重叠。
【解决方案2】:

我已经建立了这个解决方案

$sql = "SELECT reg, adof, ddof FROM flights WHERE reg = '$regist' AND adof < 
'$arrivalDate' ";//
 $data = mysqli_query($conn, $sql);

if (mysqli_num_rows($data) > 0) {
 foreach ($data as $key => $v) {
  if ($v['ddof'] >= $arrivalDate) {
   echo 'exists';
   }
  }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多