クエリオブジェクトを使用してWHERE句でANDとORを結合する方法


21

Cond1 Cond2が満たされる必要がある、または Cond3 が満たされる必要がある以下の目的のSQLを考えると、getQuery()それを達成するために使用する正しい方法は何ですか?

必要なSQL: 括弧内のCondition1およびCondition2)

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

連鎖あり: -> where()でORを指定する

$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

-> where()でORを指定する配列

$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

回答:


20

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'));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.