Я пытаюсь сделать объединение данных нескольких таблиц в один запрос, используя. Я использую Yii Framework (v1.15). Я сделал это так, и это работало нормально:
$command = Yii::app()->db->createCommand();
$command->select('something')->from('somewhere');
$command->union($sql);
Это производит что-то вроде этого:
ВЫБЕРИТЕ ЧТО-ТО ИЗ НЕКОТОРОГО СОЮЗА (ВЫБЕРИТЕ ….)
Но объединение объединяет повторяющиеся значения строк. Мне нужно объединить все данные, используя UNION ALL
, но я не могу найти ничего о том, как это сделать в
документация.
Может быть, некоторые из вас, как я могу сделать это, используя объект базы данных yii?
Спасибо
В 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()
метод.
Других решений пока нет …