php yii 插入,php – 在Yii SQL命令对象中添加case语句

本文探讨了在使用SQL查询时如何利用select方法的特性来构建复杂的查询语句,特别是针对包含条件表达式的字段进行别名设置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过谷歌搜索和搜索了很多,我在这里问了两个小时之后问了这个问题.但是10分钟后,我发现我得到了答案……

看了select()方法的源代码后,

public function select($columns='*',$option='')

{

if(is_string($columns) && strpos($columns,'(')!==false)

$this->_query['select']=$columns;

else

{

if(!is_array($columns))

$columns=preg_split('/\s*,\s*/',trim($columns),-1,PREG_SPLIT_NO_EMPTY);

foreach($columns as $i=>$column)

{

if(is_object($column))

$columns[$i]=(string)$column;

else if(strpos($column,'(')===false)

{

if(preg_match('/^(.*?)(?i:\s+as\s+|\s+)(.*)$/',$column,$matches))

$columns[$i]=$this->_connection->quoteColumnName($matches[1]).' AS '.$this->_connection->quoteColumnName($matches[2]);

else

$columns[$i]=$this->_connection->quoteColumnName($column);

}

}

$this->_query['select']=implode(',',$columns);

}

if($option!='')

$this->_query['select']=$option.' '.$this->_query['select'];

return $this;

}

注意第一个if语句,当一个字符串被传递并且它包含“(”时,$columns变量将直接返回,这正是我正在寻找的!

所以解决方案将是:

$sql->select('A.name as client_name,(CASE WHEN B.name = "sth" THEN B.name ELSE B.product_name END ) as product_name');

请注意别名部分“as product_name”应该在()部分之外.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值