我有物品清单。可以针对特定日期预订每个单独的项目,例如。 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');
如果项目是为2013-06-13和2013-06-14保留的,我正在寻找可用于2013-06-13的项目,它仍然会返回此查询。
我不想要。我正在寻找最简单的方法。有什么建议吗?
答案 0 :(得分:2)
您可以使用简单的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."')");