2017-09-17 103 views
1

我有这个疑问更新所有贷款WHERE user_id =?在CASE时DATEDIFF()> 0。错误1242和1093

Update loans set fine = case 
when DATEDIFF((
(SELECT * from (SELECT loans.due_date FROM loans where users_id = 1) AS l1)) 
,DATE(NOW())) > 0 THEN 1 
ELSE fine 
END 
WHERE users_id =1; 

从表

+-------------+ 
| Field  | 
+-------------+ 
| users_id | 
| books_isbn | 
| aquire_date | 
| due_date | 
| fine  | 
+-------------+ 

这是一个与用户具有只是一个“贷款”的工作,但我不知道如何使它与几个工作一位用户的“贷款”。 =(

+2

请解释的逻辑你想实施,样本数据和期望的结果是有帮助的非工作代码,更少如此 –

+0

我想增加罚款,取决于过期的天数DATEDIFF *系数 然后1它只是为了测试 –

回答

1

我希望查询一下成才这样的:

Update loans l 
    set fine = 1 
    where users_id = 1 and l.due_date < curdate(); 

这是一个有点棘手弄清楚确切的逻辑,而样本数据和预期的结果

+0

哦谢谢,我显然复杂的任务=)采取了第一个可用的方式来比较响起日期并忘记其他人 –