Bagaimana cara menggabungkan AND dan OR dalam klausa WHERE menggunakan Object Query?


21

Mengingat SQL yang diinginkan di bawah ini, di mana Cond1 dan Cond2 harus dipenuhi ATAU Cond3 harus dipenuhi untuk seleksi, apa cara yang benar untuk digunakan getQuery()untuk mencapainya?

SQL Diinginkan: Condition1 dan Condition2 dalam tanda kurung)

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

Dengan Rantai: menentukan ATAU di -> di mana ()

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

SQL yang dihasilkan: (SQL tidak ada tanda kurung)

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

Dengan Array menentukan ATAU di -> di mana ()

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

SQL yang dihasilkan: (SQL tidak ada tanda kurung)

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

Jawaban:


20

Termasuk tanda kurung yang diperlukan, dengan Chaining, menghasilkan SQL yang diinginkan:

Dengan Chaining: menentukan ATAU dan membungkus Cond1 / 2 dalam tanda kurung

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

SQL yang dihasilkan: (termasuk tanda kurung)

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

ATAU gunakan atau Di Mana / dan Di Mana

$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'));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.