Как сделать такой запрос динамически?
SELECT * FROM TABLE WHERE NOT EXISTS (
SELECT * FROM TABLE WHERE amount >= 4
)
UNION ALL
SELECT * FROM TABLE WHERE amount >= 4;
SELECT * FROM TABLE WHERE amount >= 4
)
UNION ALL
SELECT * FROM TABLE WHERE amount >= 4;
Запрос должен делать следующее:
If (в таблице есть строки где amount >= 4),
то выводим все строки где amount >= 4;
Else
выводим все строки;
Так же результат надо отсортировать по цене.
Комментарии
Всем спасибо! Сам решил следующим образом:
<?php
//Делаем главный запрос чтобы отсортировть по полю,
//Делаем запрос с условием количество > 4
$sub_query_with_condition = db_select('table', 'table_alias')
->fields('table_alias', array('field_1', 'field_2'))
->condition('table_alias.field_1', 4, '>=');
//Делаем запрос с "условным оператором"
//Если запрос с уловием о количестве пустой
//То возращаем запрос без условия
//Иначе возращаем запрос с уловием о количестве
$sub_query = db_select('table', 'table_alias')
->fields('table_alias', array('field_1', 'field_2'))//Количество столбцов должно совпадать в обоих запросах
->notExists($sub_query_with_condition)
->union($sub_query_with_condition);
//потому что если в динамеческом запросе Drupal есть Union, то нельзя длеать сортировку OrderBy
$main_query = Database::getConnection()
->select($sub_query)
->fields(NULL, array('field_1', 'field_2'))
->orderBy('field_2', 'ASC');
$main_query->execute()->fetchObject();
?>