一个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.= '[td]0[/td]';
else if($row['adlink']!=$row['link'])
$outer.= '[td]1[/td]';
else if($row['enabled']==0)
$outer.= '[td]2[/td]';
else
$outer.= '[td]3[/td]';
但是这样有局限性,就是不能根据此条件进行结果集排序。
知道mysql有case when,想通过case when实现php中那个if then的逻辑,但实验了好久,不知道应该怎么写,请各位大侠教教我。
我的SQL语句是:
select
pre.enabled,pre.link,ad.link as adlink,
CASE
WHENpre.link=='' THEN 0
ELSE WHENpre.link!=ad.link THEN 1
ELSE WHENpre.enabled==0 THEN 2
ELSE 3
END CASE
from
_ad_pre as pre
left join
_ad as ad
on ad.adid=pre.adid
但在第一case的时候就提示错误。终不得解。
经过询问高人得知,Case When不能实现,以为逻辑中有先判断不等,然后再判断等的逻辑。
最后用mysql的if操作符解决。
代码如下:
select
pre.adid,pre.enabled,pre.link as prelink,ad.link as adlink,
if(ad.link is null,0,
if(ad.link!=pre.link,1,
if(pre.enabled=0,2,3)
)
)
from
_ad_pre as pre
left join
_ad as ad
on ad.adid=pre.adid
|