我在这里要做的是:如果在$ done中标识的表todo中的记录在recurinterval列中有一个值,那么THEN reset date_scheduled列ELSE只是为这些记录设置status_id列为6。
这是我从mysql_error()...
得到的错误您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'CASE recurinterval附近使用正确的语法!= 0和recurinterval IS NOT NULL,然后在第2行设置date_sche'
如何使此声明有效?
UPDATE todo
CASE recurinterval != 0 AND recurinterval IS NOT NULL THEN
SET date_scheduled = CASE recurunit
WHEN 'DAY' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval DAY)
WHEN 'WEEK' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval WEEK)
WHEN 'MONTH' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval MONTH)
WHEN 'YEAR' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval YEAR)
END
WHERE todo_id IN ($done)
ELSE
SET status_id = 6 WHERE todo_id IN ($done)
END
在我修改之前,以下mySQL语句工作得很好。
UPDATE todo
SET date_scheduled = CASE recurunit
WHEN 'DAY' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval DAY)
WHEN 'WEEK' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval WEEK)
WHEN 'MONTH' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval MONTH)
WHEN 'YEAR' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval YEAR)
END
WHERE todo_id IN ($done)
AND recurinterval != 0
AND recurinterval IS NOT NULL
答案 0 :(得分:1)
问题是你正在尝试做一些只使用一个查询就无法做到的事情。您希望根据recurinterval字段的值更新2列中的1列。所以基本上你应该将它分成2个查询,第一个将是你拥有的那个查询。
UPDATE todo
SET date_scheduled = CASE recurunit
WHEN 'DAY' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval DAY)
WHEN 'WEEK' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval WEEK)
WHEN 'MONTH' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval MONTH)
WHEN 'YEAR' THEN DATE_ADD(date_scheduled, INTERVAL recurinterval YEAR)
END
WHERE todo_id IN ($done)
AND recurinterval != 0
AND recurinterval IS NOT NULL
第二个将用于其他行:
UPDATE todo
SET status_id = 6
WHERE todo_id IN ($done)
AND (recurinterval = 0
OR recurinterval IS NULL)
如果您运行这些查询(很可能您希望在事务中运行它们,以便在其中一个查询期间发生错误时可以回滚更改),您应该得到所需的结果。
答案 1 :(得分:0)
我相信您需要在第一个CASE关键字后添加'WHEN'。所以第一行的开头是:
UPDATE todo CASE WHEN recurinterval !=0 AND ...
答案 2 :(得分:0)
在我看来,您修改后的陈述CASE recurinterval != 0 AND recurinterval IS NOT NULL THEN
中的第一个案例实际上应该是IF