2017-09-17 1 views
1

私はこのクエリを持っているテーブルから更新すべてのローンについてWHERE user_id =? DATEDIFF()> 0の場合のCASEエラー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  | 
+-------------+ 

それはただ一つ「ローン」を持っているユーザーとの仕事だが、私はそれがいくつかで動作させる方法がわかりません1人のユーザーの「ローン」。 =(私は、クエリは次のようにいろいろ書いを見て期待

+2

そのロジックを説明してください。 –

+0

延滞日数に応じて罰金を増やしたいのですが、DATEDIFF *係数 THEN 1これは単なるテスト用です –

答えて

1

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

サンプルデータ、所望の結果をせずに、正確なロジックを把握するために少しトリッキーです

+0

ohありがとう、私は明らかにタスクを複雑に=)コンパイラの最初の利用可能な方法を取った日付を鳴らして他の人を忘れた –

関連する問題