2012-02-05 4 views
0

Я получил это:MySQL Где НЕ CurDate()

SELECT deals.* FROM deals 
JOIN deals_bookings ON (deals_bookings.deal_id = deals.ID) 
WHERE deals_bookings.date > CURDATE() 
ORDER BY deals_bookings.date DESC 

В этом, я хотел бы, чтобы исключить сделки, которые в данный момент активны (которые имеют deals_bookings.date = CURDATE())

Так что, если мы делаем вид, эти строки в deals_bookings:

deal_id 2 date 2012-02-05 
deal_id 3 date 2012-02-05 
deal_id 2 date 2012-02-06 
deal_id 4 date 2012-02-06 

Это должен возвращать только строку deal_id 4, потому что это больше, чем CurDate() и в настоящее время не активен (сегодняшняя дата 2012-02-05) ,

В настоящее время он возвращается deal_id 2 и deal_id 4, потому что я не упомянул, чтобы исключить тех, кто в настоящее время являются активными (имеют ряд с CURDATE())

Как я могу это сделать?

+0

Предоставленный код должен быть рабочим, в чем вопрос? – Vyktor

+0

Я не понимаю ваши вопросы. Почему бы не выбрать третий ряд? Что именно вы подразумеваете под «не в настоящее время активным»? yOU DEFINED IT AS ", которые имеют deal_bookings.date = CURDATE()". –

+0

В настоящее время активны те, которые имеют текущую дату, поэтому deal_bookings.date являются CURDATE() – Karem

ответ

0

Вы могли бы сделать что-то вроде этого:

select d.* 
from deals d 
join deals_bookings b on d.id = b.deal_id 
where b.date > curdate() 
    and b.deal_id not in (
    select deal_id 
    from deals_bookings 
    where date <= curdate() 
) 
order by b.date desc 

Это даст вам то, что у вас есть сейчас, но с deals_bookings значениями удалены, если они есть запись с датой или до сегодняшнего дня.

Смежные вопросы