2017-09-17 104 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

哦謝謝,我顯然複雜的任務=)採取了第一個可用的方式來比較響起日期並忘記其他人 –