Php 如何使用Yii框架命令DAO对象生成union all命令

Php 如何使用Yii框架命令DAO对象生成union all命令,php,mysql,yii,union,union-all,Php,Mysql,Yii,Union,Union All,我正在尝试使用将几个表数据合并到一个查询中。我正在使用Yii框架(v1.15)。我这样做过,效果很好: $command = Yii::app()->db->createCommand(); $command->select('something')->from('somewhere'); $command->union($sql); 这会产生如下结果: 从某处选择某物(选择…) 但union合并重复的行值。我需要使用UNION-all组合所有数据,但我找不到有关

我正在尝试使用将几个表数据合并到一个查询中。我正在使用Yii框架(v1.15)。我这样做过,效果很好:

$command = Yii::app()->db->createCommand();
$command->select('something')->from('somewhere');
$command->union($sql);
这会产生如下结果:

从某处选择某物(选择…)

但union合并重复的行值。我需要使用
UNION-all
组合所有数据,但我找不到有关如何在

也许你们中的一些人知道如何使用yii数据库对象来实现它?
谢谢

在Yii
1.x.x
的查询生成器中,
UNION ALL
不受支持。您可以将其更改为:

Yii::app()->db->createCommand("SELECT something FROM somewhere UNION ALL({$sql})");
另一种方法是重写
CDbCommand
命令中的
union()
buildQuery()
方法,或者通过继承
CDbCommand
创建
unionAll()
方法


另一种肮脏的方式是:

$sql=Yii::app()->db->createCommand()->select('something')->from('somewhere')->union("SELECT something FROM somewhere")->getText();
这等于:

SELECT `something` FROM `somewhere` UNION ( SELECT something FROM somewhere)
SELECT `something` FROM `somewhere` UNION ALL ( SELECT something FROM somewhere)
然后:

或使用正则表达式:

$command->text = preg_replace('/\sUNION\s/', ' UNION ALL ', $command->text);
这等于:

SELECT `something` FROM `somewhere` UNION ( SELECT something FROM somewhere)
SELECT `something` FROM `somewhere` UNION ALL ( SELECT something FROM somewhere)

然后,通过
createCommand()
方法传递它。

脏方法可能会产生一些意想不到的结果,但可能会节省一些时间,我想我会使用脏方法,但使用
preg\u replace
而不是
str\u replace
并搜索整个单词,希望能降低替换错误单词的可能性:)谢谢你澄清我的情况工会根本不起作用。当我执行
$cmd1->union($cmd2->getText())
时,$cmd2中的参数出现问题:
无效的参数编号:绑定变量的数量与令牌的数量不匹配