Как объединить AND и OR в предложении WHERE с помощью объекта запроса?

Учитывая требуемый SQL ниже, где Cond1 и должен быть удовлетворен Cond2 ИЛИ для выбора должен быть удовлетворен Cond3, что является правильным способом использования getQuery(), чтобы достичь этого?

Желаемый SQL: Условие1 и Условие2 в круглых скобках)

SELECT * FROM #__myTable 
WHERE (condition1=true AND condition2=true) OR condition3=true

С цепочкой: с указанием OR в -> where ()

$query = $db->getQuery(true);
$query->select('* FROM #__myTable')
->where('condition1 = true AND condition2 = true','OR')
->where('condition3 = true');

Результат SQL: (SQL отсутствует скобки)

SELECT * FROM scm_myTable
WHERE condition1 = true AND condition2 = true OR condition3 = true

С массивами с указанием OR в -> where ()

$query = $db->getQuery(true);
$conditions12 = array(
    'condition1 = true',
    'condition2 = true'
);
$conditions3 = array(
    'condition3 = true'
);
$query->select('* FROM #__myTable')
->where($conditions12, 'OR')
->where($conditions3);

Результат SQL: (SQL отсутствует скобки)

SELECT * FROM scm_myTable
WHERE condition1 = true OR condition2 = true OR condition3 = true
19 голосов | спросил GDP 9 TueEurope/Moscow2014-12-09T21:34:23+03:00Europe/Moscow12bEurope/MoscowTue, 09 Dec 2014 21:34:23 +0300 2014, 21:34:23

1 ответ


15

Включение скобок, которые необходимы, с помощью Chaining, создало желаемый SQL:

С цепочкой: с указанием OR и упаковки Cond1 /2 в круглых скобках

$query = $db->getQuery(true);
$query->select('* FROM #__myTable')
->where('(condition1 = true AND condition2 = true)','OR')
->where('condition3 = true');

Результат SQL: (включает круглые скобки)

SELECT * FROM scm_myTable
WHERE (condition1 = true AND condition2 = true) OR condition3 = true

ИЛИ используйте orWhere /andWhere

$query = $db->getQyery(true);
$query->select('*')
->from($db->quoteName('#__myTable'))
->where($db-quoteName('condition3') . ' = TRUE')
->orWhere(array($db->quoteName('condition1') . ' = TRUE', $db->quoteName('condition2') . ' = TRUE'));
ответил GDP 9 TueEurope/Moscow2014-12-09T21:42:04+03:00Europe/Moscow12bEurope/MoscowTue, 09 Dec 2014 21:42:04 +0300 2014, 21:42:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132