我有一个 sql 表“航班”,其中包含所有航班的所有详细信息:飞机注册、到达日期、出发日期等等......现在当我想创建一个新航班时,我想检查一个航班在两个给定日期之间已经存在相同的注册。EG:有一个名为 IFLY 的航班,该航班于 2019 年 7 月 22 日抵达并于 2019 年 7 月 25 日起飞,现在如果我尝试创建具有相同注册但在 2019 年 7 月 23 日抵达并于 2019 年 7 月 24 日起飞的另一个航班,我会想检查数据库,在这些日期期间,另一个具有相同注册的航班已经在数据库中并提醒用户。我尝试过这样的事情:html form via jquery/ajax call a request on the DB$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'; }此代码不起作用,因为如果我创建一个位于已创建的两个日期之间的新航班,则不会给我例外结果。
2 回答
万千封印
TA贡献1891条经验 获得超3个赞
如果两个时间段都在另一个结束之前开始,则两个时间段会重叠。
您可以将其表述为:
SELECT f.reg
FROM flights f
WHERE f.reg = ? and
f.departureDate < ? and -- the input arrival date
f.arrivalDate > ? -- the input departure date
请注意,我更改了语法以使用参数。这是在 PHP 或任何其他应用程序层中设计查询时的最佳实践。
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
我已经建立了这个解决方案
$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';
}
}
}
- 2 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消