Tôi muốn làm cho truy vấn này sử dụng Zend \ Db \ Sql \ Chọn:Zend Framework 2 Sql Chọn với OR và AND
SELECT table1.* FROM table1
INNER JOIN table2 ON table1.columnA = table2.columnB
INNER JOIN table3 ON table1.columnC = table3.columnD
WHERE (table2.column2 = 2 or table3.column3 = 3) and table1.column1 = 1
ORDER BY table1.columnE ASC LIMIT 1
tôi có mã này cho đến nay:
/*@var $db Adapter */
$db = $this->getServiceLocator()->get('db');
$sql = new Sql($db);
$select = $sql->select();
$select->from('table1');
$select->join('table2','table1.columnA = table2.columnB',array());
$select->join('table3','table1.columnC = table3.columnD',array());
$select->where(array('table2.column2' => 2, 'table2.column3' => 3), Predicate\PredicateSet::OP_OR);
$select->where(array('table1.column1' => 1),Predicate\PredicateSet::OP_AND);
$select->order('table1.columnE ASC');
$select->limit(1);
$statement = $sql->prepareStatementForSqlObject($select);
$resultSet = $statement->execute();
Nhưng doesn 't hoạt động, bởi vì sản xuất này (không có "(" và ")" cho OR):
SELECT table1.* FROM table1
INNER JOIN table2 ON table1.columnA = table2.columnB
INNER JOIN table3 ON table1.columnC = table3.columnD
WHERE table2.column2 = 2 or table3.column3 = 3 and table1.column1 = 1
ORDER BY table1.columnE ASC LIMIT 1
Tôi có thể làm gì?
Cảm ơn, tôi đã sử dụng tạo "$ where = new \ Zend \ Db \ Sql \ Where();" nhưng điều này cũng hoạt động tốt. – leticia
@ gsc-leticia rằng ví dụ sẽ ghi đè lên bất kỳ điều kiện nào đã được đặt trước, vì '$ select-> trong đó ($ where)' thay thế hoàn toàn đối tượng Where. Ngoài ra không cần thiết tạo ra các đối tượng thêm là một bit nhỏ nhất nhưng perf hit. – Xerkus
cảm ơn, tôi sẽ kiểm tra và xác nhận bạn – leticia