以下の必要なSQLがある場合、Cond1およびCond2が満たされる必要があります[〜#〜]または[〜#〜 ]Cond3は選択のために満たされる必要があります。それを達成するためにgetQuery()
を使用する正しい方法は何ですか?
Desired SQL:Condition1およびCondition2(括弧内))
SELECT * FROM #__myTable
WHERE (condition1=true AND condition2=true) OR condition3=true
連鎖あり:指定OR in-> 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 in-> 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
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
OR 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'));