Как сделать объединение всех команд, используя Yii Framework DAO объект

Я пытаюсь сделать объединение данных нескольких таблиц в один запрос, используя. Я использую Yii Framework (v1.15). Я сделал это так, и это работало нормально:

$command = Yii::app()->db->createCommand();
$command->select('something')->from('somewhere');
$command->union($sql);

Это производит что-то вроде этого:

ВЫБЕРИТЕ ЧТО-ТО ИЗ НЕКОТОРОГО СОЮЗА (ВЫБЕРИТЕ ….)

Но объединение объединяет повторяющиеся значения строк. Мне нужно объединить все данные, используя UNION ALL, но я не могу найти ничего о том, как это сделать в
документация.

Может быть, некоторые из вас, как я могу сделать это, используя объект базы данных yii?
Спасибо

2

Решение

В Yii 1.x.xпостроитель запросов, UNION ALL не поддерживается. Вы можете изменить это на:

Yii::app()->db->createCommand("SELECT something FROM somewhere UNION ALL({$sql})");

Другой способ переопределить union() а также buildQuery() методы в CDbCommand команда или создать unionAll() метод наследования CDbCommand,


Другая грязный путь будет:

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

Который равен:

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

Затем:

$sql=  str_replace('UNION', 'UNION ALL', $sql);

Или используя регулярное выражение:

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

Который равен:

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

Затем, передайте это через createCommand() метод.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]