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


SQL, SELECT items which specific date is not booked

我有一个项目列表。每一项都可以在特定的日期预订。2013-01-03 00:00:00, 2013-06-13 00:00:00等我必须以显示所选日期的可用项目的方式过滤项目。如果项目只有一个预订,没有问题,但如果项目有几个预订,我不知道如何构造查询

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');

如果item为2013年6月13日和2013年6月14日保留,而我正在查找2013年6月13日可用的项目,它仍然以这个查询返回。

我不想。我在寻找最简单的方法。任何建议吗?

您可以使用简单的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."')");