Làm cách nào để kết hợp AND và OR trong mệnh đề WHERE bằng cách sử dụng Đối tượng truy vấn?


21

Đưa ra SQL mong muốn bên dưới, trong đó Cond1 Cond2 phải được đáp ứng HOẶC Cond3 phải được đáp ứng để lựa chọn, cách sử dụng chính xác getQuery()để đạt được nó là gì?

SQL mong muốn: condition1 và condition2 trong ngoặc đơn)

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

Với Chaining: chỉ định HOẶC trong -> where ()

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

Kết quả SQL: (SQL thiếu dấu ngoặc đơn)

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

Với Mảng chỉ định HOẶC trong -> where ()

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

Kết quả SQL: (SQL thiếu dấu ngoặc đơn)

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

Câu trả lời:


20

Bao gồm các dấu ngoặc đơn cần thiết, với Chaining, đã tạo ra SQL mong muốn:

Với Chaining: chỉ định OR và gói Cond1 / 2 trong ngoặc đơn

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

Kết quả SQL: (bao gồm dấu ngoặc đơn)

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

HOẶC sử dụng 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'));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.