Mysql案例不起作用

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

当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 '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 ,