ANDS ve OR'leri bir Query Object kullanarak WHERE yan tümcesinde birleştirmek nasıl?


21

Aşağıda istenen SQL verildiğinde, Cond1 ve Cond2'nin karşılanması gereken yerlerde VEYA Cond3'ün seçim için karşılanması gerekir, getQuery()bunu elde etmenin doğru yolu nedir?

İstenen SQL: Parantezler içinde Condition1 ve Condition2)

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

Zincirleme ile: VEYA -> işaretinde ((

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

Sonuçta ortaya çıkan SQL: (SQL parantez içinde yok)

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

-> dizininde VEYA'yı belirten Diziler ile

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

Sonuçta ortaya çıkan SQL: (SQL parantez içinde yok)

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

Yanıtlar:


20

İhtiyaç duyulan parantezler dahil, Zincirleme ile istenen SQL'i üretti:

Zincirleme ile: Cond1 / 2 'nin parantez içerisinde OR ile belirtilmesi

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

Sonuçta ortaya çıkan SQL: (parantez dahil)

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

VEYA kullanın veya

$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'));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.