php - MySQL Union All 在 Yii 的默认范围内

标签 php mysql yii

我使用的是 Yii 1.1.16,想知道 Union 2 模型如何使用默认范围?

model 1 = abc
model 2 = abc2

基本上我想做一个简单的联合

SELECT * FROM `abc`
UNION ALL
SELECT * FROM `abc2`

还没有真正使用默认范围,所以对这个概念有点陌生。 两个表的列号和列名完全相同。

我试过了,但失败了。

在我的 abc 模型中

public function defaultScope() {
        return array(
            'alias' => 't2',
            'select'=>array('t.*, t2.*'),
            'union'=>array('SELECT * FROM `abc2`')
        );
    }

更新: 刚刚实现http://www.yiiframework.com/doc/api/1.1/CDbCriteriaCDbCriteria没有union

public function defaultScope() {
        return array(
            //'alias' => 't',
            'select'=>array('*'),
            'join'=>'UNION ALL SELECT * FROM `abc2`'
        );
    }

上面的代码给了我一个错误

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't.make_code' in 'where clause'. The SQL statement executed was: SELECT `t`.`class_code`, `t`.`make_code`, `t`.`model_code` FROM `abc` `t` UNION ALL SELECT * FROM `abc2` WHERE `t`.`make_code`=:yp0 LIMIT 1. Bound with :yp0='11' 

在两个表中,我都有列 make_code

我需要这样的查询

SELECT * FROM 
(
   SELECT * FROM `abc` 
      UNION ALL 
   SELECT * FROM `abc2`
) AS t 

怎么办?

最佳答案

您可以使用 Yii query builder ;当您需要构建非标准查询时,它是首选解决方案,并且它本身支持 UNION:

$data = Yii::app()->db->createCommand()
  ->select('*')
  ->from('abc')
  ->union('SELECT * FROM `abc2`')
  ->where('make_code=:make_code', [':make_code'=>42])
  ->queryAll();

或者,您可以使用 ->getText() 或手动编写 SQL,然后利用 CSqlDataProvider 而不是直接查询制作可配置的数据源。

关于php - MySQL Union All 在 Yii 的默认范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956474/

相关文章:

php - 在 WHERE 子句中使用 mysql concat()?

php - 连接到 wampserver MySQL 在 PHP 中有效,但在 vb.NET 中无效

php - 登录失败 Yii2 没有错误信息

html - 如何在 Yii CMenu 标签中添加原始 HTML

php - 从数据库加载完整的 ID 列表或一次执行一条记录?什么是最好的?

php - 在 PHP 中解析 Wikipedia API json

php - 动态更改 html 表格以在移动设备上显示

php - 将最不可能的匹配项分组 - MySQL

python - mysql错误: ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)

php - mysql连接表并接收一行