我在這裏用google搜索了兩個小時後在這裏問了一個問題,並在這裏搜索了很多。但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語句,當一個字符串傳遞,它包含「(」時,$列變量將直接返回,這真的是我期待的
因此,解決辦法是:!
$sql->select('A.name as client_name, (CASE WHEN B.name = "sth" THEN B.name ELSE B.product_name END) as product_name');
要小心的是,其他外作爲product_name「的部分應該超出()部分。
有時候自己比搜索引擎有用:) –
謝謝,金招。可能花了我一些時間來解決這個問題,但是多虧了你,我花了一段時間在Google上打字並點擊了這個鏈接。 –
@RichHarding很高興幫助你:) –