Php 如何在mysql中使用类似sql的case?

Php 如何在mysql中使用类似sql的case?,php,mysql,Php,Mysql,我正在尝试做一个MySQL查询 SELECT distinct FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(DateAndTime)/(60*2))*(60*2)) as DateAndTime, (CASE WHEN TagName like '%AHU-204\CV' THEN Val END) AS Tag0 from view1 where (view1.DateAndTime between "2014-12-03

我正在尝试做一个MySQL查询

SELECT distinct FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(DateAndTime)/(60*2))*(60*2)) as DateAndTime,
       (CASE WHEN TagName like '%AHU-204\CV' THEN Val END) AS Tag0 
       from view1 
       where (view1.DateAndTime between "2014-12-03 11:30" AND "2014-12-03 13:00") 
       GROUP BY DateAndTime

它正确地获取DateAndTime列,但并没有从表中获取值,而是在Tag0列中显示NULL。“我的视图1”的Val列中存在值。

如果不带else的case的条件都不匹配,则该case将显示NULL值;在您的情况下,如果标记名与like命令不匹配,则该case将显示NULL给Tag0

示例1:当大小写与原始查询不匹配时,这会将null发布到tag0

如果只需要收集与like条件匹配的值,则将like条件移动到WHERE子句

示例2:将“case”从select移到WHERE子句。当条件不匹配时,它不会发布到结果中

注意标记名和表达式的上限,以强制区分大小写

如果需要多个匹配项,可以在where子句上设置多个事例:

示例3:使用WHERE子句或on子句匹配多个图案

或者在Tag0不为空的位置添加一个:

示例4:使用示例1查询并删除Tag0为null的结果

另外,这只是一个附录,如果您试图将“%ahu-204\CV”与“%ahu-204\CV”匹配,则可能会出现区分大小写的问题,具体取决于您的字符集。
在这种情况下,尝试匹配上面的标记名,如“%AHU-204\CV”,您将获得不区分大小写的匹配。

是否尝试使用group by 1而不是group by dateandtime?否..我将尝试让您知道..我尝试..仍然显示表中所述字段的NULLpost一些示例记录。如果标记名与匹配字符串匹配,您的案例将选择Tag0,但是,如果数据库上的值不匹配,它将选择NULL作为Tag0。尝试向该案例中添加一个else,看看它是否返回else上的值如果是,那么您的匹配字符串可能会被破坏,或者数据库上的值根本不匹配all@Felype..error:1054-在where子句中使用Champ“Tag0”。对于u给出的第四个查询,它是什么意思?@user1993它说Tag0不存在,忘记了在Where子句中使用自定义别名时必须派生,对不起。Updated@user1993更新。我提取了tag0不为null的位置,但在内部查询中仍然存在该位置,因此错误将是相同的。现在再试一次,应该可以工作了。@Felype..Hi..谢谢您的回复..我尝试了更新的查询,它返回的结果集为空,但我的表中存在值。列tag0不存在于我的view1中,无法从中获取值。我们正在运行时的查询中定义和创建它。我说得对吗?。请帮助我是的,内部查询选择tag0作为您提供的表达式,外部查询选择该Tag0作为列,将内部表视为派生表,然后检查其是否为null。我想说的是,测试这一点的一个好方法是运行内部查询并查看其结果,如果它返回大量空值,但中间返回了所需的值,那么问题就出在外部查询中,但我并不这么认为。是否尝试改用UPPERTagName?大多数字符集将不匹配“ahu”和“ahu”,例如,区分大小写。
SELECT distinct FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(DateAndTime)/(60*2))*(60*2)) as DateAndTime,
(CASE WHEN TagName like '%AHU-204\CV' THEN Val END) AS Tag0 from view1 
where (view1.DateAndTime between "2014-12-03 11:30" AND "2014-12-03 13:00") 
GROUP BY DateAndTime
SELECT distinct FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(DateAndTime)/(60*2))*(60*2)) as DateAndTime, 
TagName AS Tag0 from view1 
where (view1.DateAndTime between "2014-12-03 11:30" AND "2014-12-03 13:00") AND UPPER(TagName) like UPPER('%AHU-204\CV') 
GROUP BY DateAndTime
SELECT distinct FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(DateAndTime)/(60*2))*(60*2)) as DateAndTime,
TagName AS Tag0 from view1
where (view1.DateAndTime between "2014-12-03 11:30" AND "2014-12-03 13:00") AND 
(UPPER(TagName) like UPPER('%AHU-204\CV') OR UPPER(TagName) like UPPER('%CTH-506\ST%'))
GROUP BY DateAndTime
SELECT DateAndTime, Tag0 FROM (
    SELECT distinct FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(DateAndTime)/(60*2))*(60*2)) as DateAndTime,
    (CASE WHEN UPPER(TagName) like '%AHU-204\CV' THEN Val END) AS Tag0 from view1 
    where (view1.DateAndTime between "2014-12-03 11:30" AND "2014-12-03 13:00")
    GROUP BY DateAndTime) AS Derived 
WHERE Tag0 IS NOT NULL;