Ich stellte die Frage hier, nachdem ich 2 Stunden lang gegoogelt und viel gesucht hatte. Aber 10 Minuten später fand ich, dass ich die Antwort habe ...
Nach einem Blick auf den Quellcode von select() Methode nimmt,
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;
}
Achten Sie auf die erste if-Anweisung, wenn ein String übergeben wird und es enthält „(“, wird die $ Spalten Variable direkt zurückgeführt werden, das ist wirklich das, was ich suche
So wird die Lösung sein:
$sql->select('A.name as client_name, (CASE WHEN B.name = "sth" THEN B.name ELSE B.product_name END) as product_name');
darauf achten, dass die alia Der Teil "as product_name" sollte außerhalb des Abschnitts() sein.
manchmal selbst ist nützlich als die Suchmaschine :) –
Danke, Jinzhao. Ich hätte mir etwas Zeit nehmen können, um das auszuarbeiten, aber dank dir hat es nur die Zeit gedauert, in der ich in Google getippt und auf diesen Link geklickt habe. –
@RichHarding Froh, dir da zu helfen :) –