Динамические запросы Drupal с "условным оператором" (Dynamic SQL query drupal )

Главные вкладки

Аватар пользователя Phjester Phjester 26 марта 2019 в 22:45

Как сделать такой запрос динамически?

SELECT * FROM TABLE WHERE NOT EXISTS (
    SELECT * FROM TABLE WHERE amount >= 4
)
UNION ALL
SELECT * FROM TABLE WHERE amount >= 4;

Запрос должен делать следующее:

If (в таблице есть строки где amount >= 4),
то выводим все строки где amount >= 4;
Else
выводим все строки;

Так же результат надо отсортировать по цене.

Лучший ответ

Аватар пользователя Phjester Phjester 27 марта 2019 в 1:18
1

Всем спасибо! Сам решил следующим образом:

<?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();
?>

Комментарии

Аватар пользователя Phjester Phjester 27 марта 2019 в 1:18
1

Всем спасибо! Сам решил следующим образом:

<?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();
?>