2013-06-13 3 views
0

У меня есть список предметов. Каждый отдельный объект может быть забронирован на определенную дату, например. 2013-01-03 00:00:00, 2013-06-13 00:00:00 и т. Д. Я должен фильтровать элементы таким образом, чтобы отображать доступные элементы для выбранной даты. Если деталь имеет только одного резервирования нет никаких проблем, но я не знаю, жарко, чтобы построить запрос, если деталь имеет несколько оговорокSQL, SELECT items, не указанная конкретная дата

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, он по-прежнему возвращается с этим запросом.

Я не хочу. Я ищу самый простой способ. Какие-нибудь советы?

ответ

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."')"); 
+0

хорошо работает. Благодарю. –