Tôi đã đặt câu hỏi ở đây sau khi đấu tranh trong 2 giờ bằng cách googled và tìm kiếm rất nhiều ở đây. Nhưng 10 phút sau, tôi thấy tôi đã có câu trả lời ...
Sau khi tham gia một cái nhìn tại các mã nguồn của phương pháp lựa chọn(), sự chú ý
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;
}
Pay đến 1 câu lệnh if, khi một chuỗi được thông qua và nó chứa "(", biến $ cột sẽ được trả trực tiếp, đó là thực sự những gì tôi đang tìm kiếm
vì vậy, các giải pháp sẽ là:!
$sql->select('A.name as client_name, (CASE WHEN B.name = "sth" THEN B.name ELSE B.product_name END) as product_name');
chăm sóc rằng alia một phần "như product_name" nên được ra khỏi() phần.
Nguồn
2012-08-30 07:18:40
đôi khi bản thân bạn hữu ích hơn công cụ tìm kiếm :) –
Cảm ơn, Jinzhao. Có thể đã đưa tôi một thời gian để làm việc này nhưng nhờ bạn nó chỉ mất thời gian tôi đã gõ vào Google và nhấp vào liên kết này. –
@RichHarding Rất vui được giúp bạn ở đó :) –