首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Yii框架命令DAO对象生成union命令

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

Stack Overflow用户
提问于 2014-11-27 15:04:48
回答 1查看 1.9K关注 0票数 2

我试图将几个表数据合并到一个查询中。我正在使用Yii框架(v1.15)。我是这样做的,这件事很好:

代码语言:javascript
运行
复制
$command = Yii::app()->db->createCommand();
$command->select('something')->from('somewhere');
$command->union($sql);

这会产生这样的结果:

从某地联盟中选择某物(选择.)

但是联合合并重复的行值。我需要使用UNION ALL组合所有的数据,但是我无法在文档中找到任何关于如何做到这一点的信息。

也许你们中的一些人,我怎么才能用yii数据库对象来做呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-27 15:15:13

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

代码语言:javascript
运行
复制
Yii::app()->db->createCommand("SELECT something FROM somewhere UNION ALL({$sql})");

另一种方法是在union()命令中重写CDbCommandbuildQuery()方法,或者通过继承CDbCommand创建unionAll()方法。

另一种方式是:

代码语言:javascript
运行
复制
$sql=Yii::app()->db->createCommand()->select('something')->from('somewhere')->union("SELECT something FROM somewhere")->getText();

相当于:

代码语言:javascript
运行
复制
SELECT `something` FROM `somewhere` UNION ( SELECT something FROM somewhere)

然后:

代码语言:javascript
运行
复制
$sql=  str_replace('UNION', 'UNION ALL', $sql);

或使用正则表达式:

代码语言:javascript
运行
复制
$command->text = preg_replace('/\sUNION\s/', ' UNION ALL ', $command->text);

相当于:

代码语言:javascript
运行
复制
SELECT `something` FROM `somewhere` UNION ALL ( SELECT something FROM somewhere)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27173662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档