在where子句

时间:2019-04-23 03:18:17

标签: mysql where

我需要找出如何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_time10: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需要修复/修改。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

此查询将为您提供所需的结果。它会检查交货日期是否与所选日期匹配,然后检查交货时间是否与选择时间相同(无需检查duration IS NULL是否为{{1 }}),或者如果所选时间落入投放窗口(delivery_time +/-持续时间)之内。

duration IS NOT NULL

Demo on dbfiddle