2014-02-14 101 views
0

這是MySQL,它抱怨if語句。也許有人看到的錯誤,因爲我覺得我看着它太長:mySQL IF語句語法

SELECT c.id AS id, (p.validFor * 30) AS validFor, p.validFrom as validFrom, 
date(FROM_UNIXTIME(rr.timemodified)) as date, 
(CASE 
    WHEN date(validFrom) < date(FROM_UNIXTIME(rr.timemodified)) THEN (DATEDIFF(DATE_ADD(FROM_UNIXTIME(rr.timemodified), INTERVAL p.validFor MONTH) , NOW())) 
    WHEN date(validFrom) > date(FROM_UNIXTIME(rr.timemodified)) THEN (DATEDIFF(DATE_ADD(validFrom, INTERVAL p.validFor MONTH) , NOW())) 
END)AS daysLeft, 
IF (rr.timemodified < g.timemodified, (DATEDIFF(DATE_ADD(FROM_UNIXTIME(g.timemodified), INTERVAL p.validFor MONTH) , NOW())- (validFor * 30.48))) as daysLeft 

FROM mdl_readtickbox_responses rr 
JOIN mdl_readtickbox r ON r.id = rr.readtickboxid 
JOIN mdl_course c ON c.id = r.course 
JOIN mdl_procedures p ON p.id = c.idnumber 
JOIN mdl_groups_members gm ON gm.userid = rr.userid 
JOIN mdl_groups g ON g.id = gm.groupid 
WHERE rr.userid = '2' 
AND g.courseid = r.course 
AND p.status != 'obsolete' 
ORDER BY p.priority, daysLeft 

回答

0

你忘了其他的,如果statment

IF (rr.timemodified < g.timemodified, (DATEDIFF(DATE_ADD(FROM_UNIXTIME(g.timemodified), INTERVAL p.validFor MONTH) , NOW())- (validFor * 30.48)), *********) as daysLeft 
                                        --->>>>> write your else conditon here             
+0

謝謝:)完全忘了:) – Erika

+0

歡迎你:)!如果它解決了你的問題,請確保接受解答 –

0

你沒有一個FALSE部分

IF (
     rr.timemodified < g.timemodified, 
     (DATEDIFF(DATE_ADD(FROM_UNIXTIME(g.timemodified), INTERVAL p.validFor MONTH) , NOW())- (validFor * 30.48)) 
    ) as daysLeft 

IF(expr1,expr2,expr3)

如果表達式1爲真(表達式1 < > 0和expr1 <> NULL),那麼IF()返回 expr2;否則它返回expr3。