我需要找出如何COUNT
匹配我的查询的行数。这是我的数据库:
+----+---------------+---------------+----------+
| id | delivery_date | delivery_time | duration |
+----+---------------+---------------+----------+
| 1 | 2018-02-17 | 10:30:00 | 40 |
+----+---------------+---------------+----------+
| 2 | 2018-02-18 | 14:20:00 | 25 |
+----+---------------+---------------+----------+
| 3 | 2018-02-19 | 08:50:00 | null |
+----+---------------+---------------+----------+
我有一个selectedDate
和一个selectedTime
。我想看看它是否属于“持续时间”之前和之后的时间。
因此,例如,如果delivery_time
为10:30:00
,而duration
为40,则它将减去40,并将40加到delivery_time
上。因此,介于09:50:00
-11:10:00
之间的任何时间都将被视为存在。
此外,如果持续时间不存在或为null,那么仅delivery_time
本身将被计数。
这是我的代码(仅作为示例,不安全生产,包括漏洞):
/////// Expected Output //////
$selectedDate1 = '2018-02-18';
$selectedTime1 = '14:35:00';
// Exists
$selectedDate2 = '2018-02-18';
$selectedTime2 = '14:50:00';
// Does not exist
$selectedDate3 = '2018-02-17';
$selectedTime3 = '09:50:00';
// Exists
$selectedDate3 = '2018-02-19';
$selectedTime3 = '08:50:00';
// Exists
////// Expected Output End //////
$stmt = $dbh->prepare("
SELECT COUNT(*) FROM deliveries
WHERE delivery_date = $selectedDate# AND
(delivery_time = $selectedTime# AND duration IS NULL)
OR
(delivery_time +-= duration = $selectedTime# AND duration IS NOT NULL)
);
很显然,delivery_time +-= duration
需要修复/修改。任何帮助将不胜感激!
答案 0 :(得分:1)
此查询将为您提供所需的结果。它会检查交货日期是否与所选日期匹配,然后检查交货时间是否与选择时间相同(无需检查duration IS NULL
是否为{{1 }}),或者如果所选时间落入投放窗口(delivery_time +/-持续时间)之内。
duration IS NOT NULL