วิธีรวม ANDs และ ORs ในส่วนคำสั่ง WHERE โดยใช้ Query Object


21

เมื่อพิจารณาจาก SQL ที่ต้องการด้านล่างโดยที่ Cond1 และ Cond2 ต้องเป็นไปตามที่กำหนดหรือต้องพบกับ Cond3 สำหรับการเลือกวิธีที่ถูกต้องในการใช้getQuery()เพื่อให้บรรลุนั้นคืออะไร?

SQL ที่ต้องการ: Condition1 และ Condition2 ภายในวงเล็บ)

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

เมื่อมีการผูกมัด: การ ระบุหรือใน -> 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

ด้วย Array ที่ ระบุหรือใน -> 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

คำตอบ:


20

การรวมวงเล็บที่ต้องการด้วย Chaining ทำให้ SQL ที่ต้องการ:

ด้วยการผูกมัด: การ ระบุหรือการรวม 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

หรือใช้หรือที่ไหน / และที่ไหน

$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.