SQL, SELECT 特定日期未预订的项目

Posted

技术标签:

【中文标题】SQL, SELECT 特定日期未预订的项目【英文标题】:SQL, SELECT items which specific date is not booked 【发布时间】:2013-06-09 15:30:59 【问题描述】:

我有物品清单。每个项目都可以在特定日期预订,例如。 2013-01-03 00:00:00, 2013-06-13 00:00:00 等。我必须以显示所选日期可用项目的方式过滤项目。如果item只有一个reservation没有问题,但是如果item有几个reservation,我不知道热构建查询

cms_items

[id:int, name:varchar, category:int]

cms_items_reservations

[id:int,item_id:int,reservation_date:timestamp]

我使用 CodeIgniter 并创建了这样的东西:

    $this->db->
            select('DISTINCT(item.item_id), item.name, item.category', false)->
            from('cms_items_reservations AS rs')->
            join('cms_items AS item', 'item.id = rs.item_id', 'right')->
            where('item.category', $regionId)->
            where('DATE_FORMAT(rs.reservation_date, "%Y-%m-%d") <>', $date)->
            where('rs.item_id = item.id');

如果项目是为 2013-06-13 和 2013-06-14 保留的,而我正在寻找可用于 2013-06-13 的项目,它仍会随此查询返回。

我不想要。我正在寻找最简单的方法。有什么建议吗?

【问题讨论】:

【参考方案1】:

你可以使用简单的subquery

SELECT * FROM cms_items WHERE id NOT IN (
SELECT item_id FROM cms_items_reservations WHERE 
DATE_FORMAT(reservation_date, "%Y-%m-%d") ='2013-06-13')

$this->db->query("SELECT * FROM cms_items WHERE id NOT IN (
SELECT item_id FROM cms_items_reservations WHERE 
DATE_FORMAT(reservation_date, '%Y-%m-%d') ='".$date."')");

【讨论】:

以上是关于SQL, SELECT 特定日期未预订的项目的主要内容,如果未能解决你的问题,请参考以下文章

需要一个 MySQL 查询来获取未在表中注册的日期

从到达和离开日期选择未预订的房间

如何分组,计算和映射日期范围? [关闭]

php [WooCommerce预订]在前端未使用日历选择器时更改日期格式

sql 实际预订日期

已解决触发器以检查预留 mysql 的可用性