2014-12-23 3 views
1

У меня есть таблица объектов:Обновление БД в зависимости от значения

object_id -- active -- tarif_id 
1   1   5 
2   0   6 
3   1   19 

И у меня есть таблица Tarifs:

tarif_id -- expire_date 
5   2014-01-01 
6   2014-05-01 
19   2015-12-11 

Можно ли написать SQL, который будет проверять все object's tarif_id's истекает даты с Date.NOW и если Date.Now больше, то установить object's active статус на 0?

ответ

1

попробовать этот

UPDATE tblObject 
INNER JOIN tbltarifs ON tblObject.tarif_id = tbltarifs.tarif_id 
SET tblObject.active = 0 
WHERE DATE_FORMAT(NOW(),'%m-%d-%Y') > DATE_FORMAT(expire_date,'%m-%d-%Y') 
+0

Если 'expire_date' определяется как' date' затем с помощью 'date_format' неправильно. Вы должны сравнивать даты, а не строки. Дата '2010-01-30' будет считаться« больше », чем« 2015-01-01 », если сравнить ее с строкой с этим форматом. –

1

Уверенный, вы можете. Вы ищете функцию UPDATE.

UPDATE ObjectsTable 
SET active = 0 
WHERE [tarif_id] IN (
     SELECT [tarif_id] 
     FROM TarifTable 
     WHERE [expiredate] < DATE.Now --or whatever you are using to get the current date 
     )