Php 如何使用Yii框架命令DAO对象生成union all命令
我正在尝试使用将几个表数据合并到一个查询中。我正在使用Yii框架(v1.15)。我这样做过,效果很好: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组合所有数据,但我找不到有关
$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中的参数出现问题:无效的参数编号:绑定变量的数量与令牌的数量不匹配