加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – 在Yii SQL命令对象中添加case语句

发布时间:2020-05-25 09:32:51 所属栏目:PHP 来源:互联网
导读:在YII中,我已经有了一个功能: $sql = Yii::app()-db-createCommand();$sql-select(A.name as client_name, B.name as product_name);$sql-join(tableb B, A.id=B.product_id);$sql-from(tablea A);$sql-where

在YII中,我已经有了一个功能:

$sql = Yii::app()->db->createCommand();
$sql->select('A.name as client_name,B.name as product_name');
$sql->join('tableb B','A.id=B.product_id');
$sql->from('tablea A');
$sql->where('1 = 1');

现在我试图在product_name字段中添加一个很小的逻辑,在MYSQL中它会是

CASE WHEN B.name = "sth"
THEN B.name 
ELSE B.another_name
END AS product_name

在select()函数中阻塞时是否可以添加这种情况?

经过谷歌搜索和搜索了很多,我在这里问了两个小时之后问了这个问题.但是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+ass+|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”应该在()部分之外.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读