2016-08-27 9 views
-1

Я работаю над функцией BDS для веб-сайта в Ларавеле. Теперь я пробовал задавать этот вопрос дважды здесь, но почему-то я не могу спросить его правильно, поэтому я попытаюсь дать ему последнюю попытку.Получить последнюю запись каждого донора

У меня есть 2 стола Доноры и доноры. Я хочу, чтобы все доноры и их дата последнего пожертвования давались только тогда, когда они не сдавали кровь за последние 3 месяца. Я пробовал это в обоих направлениях. Красноречивый и запрос.

Ниже мой запрос, что я использую:

SELECT donors.name, donors.mobile, donors.address, donors.blood_group, donors.area, MAX(donor_records.donation_date) AS d_date FROM donor_records JOIN donors ON donors.id = donor_records.id WHERE NOW() > DATE_ADD(donor_records.donation_date, INTERVAL 90 DAY) 

Ниже приведены записи в моих таблицах базы данных.

Доноры:

enter image description here

DonorsRecord:

enter image description here

Теперь, Но когда я выполнить запрос я только получить запись с датой пожертвования "2016-04-12" а не другой. Так может кто-нибудь помочь мне с этим в последний раз. Не имеет значения, будет ли это от Eloquent или от DB, оба будут работать нормально.

Update

Подобно этому, у меня есть еще один запрос. У меня есть таблицы

products [id, name, price] 
customer [id, name] 
purchase [customer_id, product_id, timestamp] 

Как я могу получить последний продукт каждого клиента?

+0

'donorsRecord' или' donorRecord'? –

+0

использовать в зависимости от того, что изменится, когда я выполним запрос. –

+0

'where donorRecord.donationDate> NOW() - INTERVAL 3 MONTH' – Mike

ответ

0
SELECT donors.Name FROM donors JOIN donorsRecord ON donors.id = donorsRecord.id 
WHERE NOW() > DATE_ADD(donorRecord.donationDate, INTERVAL 3 MONTH) 
group by donors.id; 
+0

возникает следующая ошибка: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом ') группа по id LIMIT 0, 25' по строке 2 –

+0

Исправлено. Это было пространство между DATE_ADD и ( –

+0

, что вы имеете в виду сэр? –

0

Использовать SELECT DISTINCT.

SELECT DISTINCT donors.Name FROM donors JOIN donorsRecord ON donors.id = donorsRecord.id 
WHERE NOW() > DATE_ADD (donorRecord.donationDate, INTERVAL 3 MONTH) 
+0

Если у некоторых доноров такое же имя? –

+0

Добавьте еще одно поле в запрос, например, дату рождения или идентификационный номер. Затем он покажет вам различные комбинации имени и другого поля (ов). –

+0

SELECT DISTINCT donors.name ОТ доноров ПРИСОЕДИНИТЬ donor_records ON donors.id = donor_records.id ГДЕ СЕЙЧАС()> DATE_ADD (donor_records.donation_date, INTERVAL 3 МЕСЯЦА); –

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