我正在尝试制作 PHP/MySQL 搜索表单。当用户想要搜索时,他需要填写 3 个输入字段:FromDate、ToDate和SucategoryID。
有 2 个表:Items 和 ItemsBlockDates在 Table Items 中,有关于该项目的信息,它由 ID 标识。在表 ItemBlockDates 中,有关于 Item 不会显示在搜索结果中的时间段的信息。它包含:ItemID、FromDate和Date字段。此外,还可以为一个项目定义多个阻止日期。
现在,我想选择 FromDate 和 To Date 输入与具有相同 ItemID 的 ItemsBlockDates 中的任何行不匹配的所有项目。
我写了一个查询,但是有一个问题:
SELECT *
FROM Items
LEFT JOIN ItemBlockDates ON Items.ID = ItemBlockDates.ItemID
WHERE Items.SubcategoryID = :SubcategoryID
AND ItemBlockDates.FromDate NOT BETWEEN CAST(:FromDate AS DATETIME) AND CAST(:ToDate AS DATETIME)
当我运行此查询时,它不会显示未设置阻止日期的项目,它还显示设置了多个阻止日期的项目。
我想选择 FromDate 和 To Date 输入与
ItemsBlockDates
具有相同 ItemID 的任何行不匹配的所有项目。
对我来说,这表明NOT EXISTS
:
SELECT i.*
FROM Items i
WHERE i.SubcategoryID = :SubcategoryID AND
NOT EXISTS (SELECT 1
FROM ItemBlockDates ibd
WHERE i.ID = ibd.ItemID AND
ibd.FromDate BETWEEN CAST(:FromDate AS DATETIME) AND CAST(:ToDate AS DATETIME)
);
如果您传入参数,我不确定为什么需要转换为DATETIME
. 您应该能够以正确的类型传递它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句