我正在尝试选择所有小于或等于今天日期的行(此部分正在运行)但我不想要今天的行,其中$ time小于结束时间
测试表:{ID,日期,状态,checkid}
检查表:{checkid,startt,endt}:start和end是时间值,如下所示。
$time = '15:00:00';
$query = ("SELECT test.ID, test.status, check.startt, check.endt FROM test INNER JOIN check ON test.checkid=check.checkid
WHERE test.date <='$date' AND $time < check.endt");
如果时间小于检查表中的结束时间,则查询不会显示任何内容。我知道我做错了但我无法弄明白,我正在尝试if语句atm。
答案 0 :(得分:0)
基本上代码你所描述的... I.e. test.date
=“今天”
日期条件“1”仅适用(但今天不包括在内)
条件“2”涉及日期和时间(今天)。
WHERE test.date < $date
OR (test.date = $date AND check.endt <= $time)
注意:请注意,如果您尝试组合日期和时间,以便执行单一比较:这是可能的;但查询将无法利用索引,因此不建议。
PS:您的要求有更直接的翻译。不幸的是,它更加冗长,优化者可能无法找到最佳计划。
where test.date <= $date
and test.id not in (
select test.id
from ...
where test.date = $date
and check.endt > $time
)
同样适用于支持EXCEPT
子句的平台(显然很多流行的子句除了mysql):
select Col1, Col2
from ...
where test.date <= $date
except
select Col1, Col2
from ...
where test.date = $date and check.endt > $time
EXCEPT
语法非常自然地读取,即使它非常详细。