关于mysql case when 的难题,怎么解决?
一个php程序,链接mysql;
数据库有两个表,各有adid和link字段,主表有enabled字段。
ad_pre表,预备表,主表
ad表,正式表
需求是想知道预备表中的数据在正式表中的状态
现在使用的方法是取出后用php判断状态。
select
pre.enabled,pre.link,ad.link as adlink
from
_ad_pre as pre
left join
_ad as ad
on ad.adid=pre.adid
取出记录集以后迭代记录集是利用如下代码输出状态。
if($row['adlink']=='')
$outer.= '
0';else if($row['adlink']!=$row['link'])
$outer.= '
1';else if($row['enabled']==0)
$outer.= '
2';else
$outer.= '
3';但是这样有局限性,就是不能根据此条件进行结果集排序。
知道mysql有case when,想通过case when实现php中那个if then的逻辑,但实验了好久,不知道应该怎么写,请各位大侠教教我。
我的SQL语句是:
select
pre.enabled,pre.link,ad.link as adlink,
CASE
WHEN pre.link=='' THEN 0
ELSE WHEN pre.link!=ad.link THEN 1
ELSE WHEN pre.enabled==0 THEN 2
ELSE 3
END CASE
from
_ad_pre as pre
left join
_ad as ad
on ad.adid=pre.adid
但在第一case的时候就提示错误。终不得解。
使用mysql的查询的话比较麻烦一下,sql语句如下:
select (case when date_format(shijian,'%Y')=date_format(now(),'%Y') then (case when date_format(shijian,'%Y-%m-%d')=date_format(now(),'%Y-%m-%d') then date_format(shijian,'%H:%i') else date_format(shijian,'%m-%d') end) else year(shijian) end) as newshijian,shijian from text;
解释:
测试用的表:
CREATE TABLE `text` (
`shijian` datetime default NULL
)
例子中的表名叫text,时间的字段是shijian
date_format函数是将时间格式化,now函数是获取当前的时间。
另外,如果查询的结果比较多的话,建议这个复杂的查询可以使用程序来代替,比如查询出结果后,在程序中进行判断和处理,否则查询的时间会比较长。
10-04-11
| 添加评论
| 打赏
◆◆
请登录后再发表评论!
◆◆