Pregunta

Estoy tratando de usar Zend_Db_Select a escribir una consulta de selección que se ve algo como esto:

SELECT * FROM bar WHERE a = 1 AND (b = 2 OR b = 3)

Sin embargo, cuando se usa una combinación de donde() y orWhere(), parece imposible el uso de la condición de agrupación como el de arriba.

¿Hay algún nativo maneras en Zend Framework para lograr lo anterior (sin necesidad de escribir la consulta real?)

¿Fue útil?

Solución

De el manual (Ejemplo 11.61.Ejemplo de parenthesizing expresiones Booleanas)


// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (price < 100.00 OR price > 500.00)
//     AND (product_name = 'Apple')

$minimumPrice = 100;
$maximumPrice = 500;
$prod = 'Apple';

$select = $db->select()
             ->from('products',
                    array('product_id', 'product_name', 'price'))
             ->where("price < $minimumPrice OR price > $maximumPrice")
             ->where('product_name = ?', $prod);

Otros consejos

La referencia anterior es genial, pero lo que si usted está jugando con cadenas?

Aquí está el ejemplo de arriba con cadenas...

// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (product_name = 'Bananas' OR product_name = 'Apples')
//     AND (price = 100)

$name1 = 'Bananas';

$name2 = 'Apples';

$price = 100;

$select = $db->select()

->from('products',
                    array('product_id', 'product_name', 'price'))

->where("product_name = '" . $name1 . "' OR product_name = '" . $name2 . "'")

->where("price=?", $price);

Espero que le ayude.Me tomó algunas tonterías para obtener las cuerdas para que funcione correctamente.

Saludos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top