Priorité des opérateurs Zend Framework Select
-
09-06-2019 - |
Question
J'essaie d'utiliser Zend_Db_Select pour écrire une requête select ressemblant à ceci:
SELECT * FROM bar WHERE a = 1 AND (b = 2 OR b = 3)
Cependant, lorsqu’on utilise une combinaison de where () et orWhere (), il semble impossible d’utiliser un groupe de conditions comme ci-dessus.
Existe-t-il des méthodes natives dans Zend Framework pour atteindre ce qui précède (sans écrire la requête réelle?)
La solution
De le manuel (Exemple 11.61. Exemple d'expressions booléennes entre parenthèses)
// 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);
Autres conseils
La référence ci-dessus est excellente, mais que se passe-t-il si vous jouez avec des chaînes?
Voici l'exemple ci-dessus avec des chaînes ...
// 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);
J'espère que ça aide. Cela m'a pris du temps pour que les chaînes fonctionnent correctement.
A bientôt.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow