Komplexe WHERE-Klausel mit Zend_Db verwenden mehrerer UND ODER Operatoren

Möchte ich generieren, diese komplexe WHERE-Klausel in Zend_Db:

SELECT * 
FROM 'products' 
WHERE 
    status = 'active' 
    AND 
    (
        attribute = 'one' 
        OR 
        attribute = 'two' 
        OR 
        [...]
    )
;

Habe ich versucht, dieses:

$select->from('product');
$select->where('status = ?', $status);
$select->where('attribute = ?', $a1);
$select->orWhere('attribute = ?', $a2);

und produziert:

SELECT `product`.* 
FROM `product` 
WHERE 
    (status = 'active') 
    AND 
    (attribute = 'one') 
    OR 
    (attribute = 'two')
;

Ich habe herauszufinden, eine Methode, dieses Werk aber für mich war es eine Art von "Betrug" mit PHP verbinden "ODER" - Klauseln erste und kombinieren Sie Sie dann mit Zend_Db wo () - Klausel. PHP-code:

$WHERE = array();
foreach($attributes as $a):
    #WHERE[] = "attribute = '" . $a . "'";
endforeach;
$WHERE = implode(' OR ', $WHERE);

$select->from('product');
$select->where('status = ?', $status);
$select->where($WHERE);

Dass hergestellt, was ich suchte. Aber ich bin mal gespannt, ob es einen "offiziellen" Weg zu bekommen, dass komplexe WHERE-Anweisung (die ist wirklich nicht zu Komplex, einfach nur mit einigen Klammern) mit Hilfe der Zend_Db-tool, anstatt die Kombination von PHP in ersten.

Prost!

InformationsquelleAutor der Frage jmbertucci | 2010-12-07

Schreibe einen Kommentar