Mysql案例不起作用
当week day等于1时,它可以正常工作,但在其他情况下它不起作用当您在Mysql案例不起作用,mysql,case,Mysql,Case,当week day等于1时,它可以正常工作,但在其他情况下它不起作用当您在case之后放置列名时,您不应该在column=value时使用,只需在value时使用即可,因为它会自动将列与When子句中的每个值进行比较 SELECT SQL_CALC_FOUND_ROWS a.* , zn.`name` AS zone_name, c.`name` AS carrier_name, CASE type WHEN type=1 THEN
case
之后放置列名时,您不应该在column=value时使用,只需在value
时使用即可,因为它会自动将列与When
子句中的每个值进行比较
SELECT
SQL_CALC_FOUND_ROWS a.* ,
zn.`name` AS zone_name,
c.`name` AS carrier_name,
CASE type
WHEN type=1 THEN 'General day'
ELSE 'Special date' END AS type_changed,
CASE week_day
WHEN week_day = -1 THEN 'notset'
WHEN week_day = 1 THEN 'monday'
WHEN week_day = 2 THEN 'tuesday'
WHEN week_day = 3 THEN 'wednesday'
WHEN week_day = 4 THEN 'thursday'
WHEN week_day = 5 THEN 'friday'
WHEN week_day = 6 THEN 'saturday'
WHEN week_day = 7 THEN 'sunday' END AS week_day_mod ,
IF(date = '0001-01-01 00:00:0', '--', DATE(date)) AS date_mod, IF(is_working_day = 1 ,'working day', 'day off') AS is_working_day_mod
FROM `ps_deliverytime_table` a
LEFT JOIN ps_zone AS zn ON(a.`id_zone` = zn.`id_zone`)
LEFT JOIN ps_carrier AS c ON(a.`id_carrier` = c.`id_carrier`)
WHERE 1 ORDER BY a.`id_time_table` ASC LIMIT 0,50
当您同时进行这两项测试时,您正在测试week\u day=(week\u day=-1)
,week\u day=(week\u day=1)
,等等。它在周一起作用,因为1=(1=1)
相当于1=1
,这是正确的;但是在星期二,它是2=(2=2)
,这相当于2=1
,这是错误的。您可以作为代码进行编辑吗,这样我们就可以阅读它了。很抱歉,无法理解代码是如何工作的。@webmak10缩进代码4空格。SO编辑器中的{}
工具将执行此操作。
CASE type
WHEN 1 THEN 'General day'
ELSE 'Special date'
END AS type_changed,
CASE week_day
WHEN -1 THEN 'notset'
WHEN 1 THEN 'monday'
WHEN 2 THEN 'tuesday'
WHEN 3 THEN 'wednesday'
WHEN 4 THEN 'thursday'
WHEN 5 THEN 'friday'
WHEN 6 THEN 'saturday'
WHEN 7 THEN 'sunday'
END AS week_day_mod ,