2014-02-14 3 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

вы забыли еще, если Постулаты

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)

Если expr1 истинно (выражение1 < > 0 и expr1 <> NULL), тогда IF() возвращает expr2; в противном случае он возвращает expr3.

Смежные вопросы