Zend Framework 2, Sql Wählen Sie mit ODER und UND
Ich möchte, um diese Abfrage mithilfe von Zend\Db\Sql\Select:
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
Habe ich diesen code so weit:
/*@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();
Aber nicht funktioniert, da Produkte, die diese (ohne die "(" und ")" für die ODER):
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
Was kann ich tun?
InformationsquelleAutor leticia | 2013-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
aus der Oberseite des Kopfes zu verwenden, Wo das fluent interface:
das Beispiel überschreiben alle Bedingungen bereits inplace, als
$select->where($where)
komplett ersetzt, Wo ein Objekt. Auch unnötige Schaffung von extra-Objekt ist eine kleinste bisschen, aber perf Treffer.danke, ich werde das überprüfen und bestätigen Sie
Du hast Recht, alles Prima funktioniert und diese Lösung ist einfacher
InformationsquelleAutor Xerkus
Ich würde so etwas machen:
Nur, weil auf diese Weise Ihre $wählen Sie dafür sorgen, dass eine Implementierung von Zend\Db\Sql\SqlInterface
dabei
wird eine Instanz von Zend Sql-operator. Die ist nicht schlecht, aber dann können Sie nicht nur tun,
BTW mit der anderen Lösung, die ich verwenden könnte: $sql->prepareStatementForSqlObject($select); $resultSet = $statement->execute(); ohne problem.
InformationsquelleAutor Delio