2016-05-03 3 views
0

У меня есть таблица заказов и таблица обновлений, которые связаны с заказами одним (заказом) ко многим (обновлениям) отношениям. Я пытаюсь выбрать все заказы, которые не были обновлены за последние 24 часа.Как выбрать все родительские строки с дочерней строкой внешнего ключа старше определенной даты?

Вот updates стол (с верхней части моей головы):

id INT PRIMARY KEY AUTO INCREMENT, 
order_id INT NOT NULL , 
update VARCHAR(255) NOT NULL, 
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
foreign key (order_id) REFERENCES orders(id) 

И orders стол:

id INT PRIMARY KEY AUTO INCREMENT, 
enabled TINYINT(1) NOT NULL DEFAULT 0, 
reference VARCHAR(10) NOT NULL, 
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

Как вернуть все заказы, которые включены, и которые имеют либо еще не обновлено или последнее обновление устарело, чем один день? (Это нормально для меня, чтобы использовать либо чистый MySQL, либо, желательно, Larvel's Eloquent ORM.)

Спасибо.

ответ

1

я сделать NOT EXISTS, чтобы вернуть заказы, которые не имеют последнее обновление:

select * from orders o 
where enabled = 1 
    and not exists (select 1 from updates u 
        where u.order_id = o.id 
        and u.created_at >= NOW() - INTERVAL 1 DAY) 
+0

Для даты бит, 'NOW() - ИНТЕРВАЛ 1 DAY' работает, только так вы знаете! Я просто проверяю запрос сейчас. – Forest

+0

Спасибо за ввод. Я исправил свой ответ. – jarlh

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