我需要创建这样的东西:
select name from table where active = 1 AND (name LIKE 'bla' OR description LIKE 'bla')
第一部分很简单:
$sqlcmd = $db->select()
->from("table", "name")
->where("active = ?", 1)
现在是棘手的部分。我该怎么窝?我知道我可以写
->orWhere("name LIKE ? OR description LIKE ?", "bla")
但那就是wron,因为我需要动态地改变所有部分。查询将在脚本运行时一直构建。有些部分被删除,有些部分被修改。在这个例子中,我需要添加那些OR-s,因为有时我需要更广泛地搜索。 “我的Zend Logic”告诉我正确的方法是这样的:
$sqlcmd = $db->select()
->from("table", "name")
->where("active = ?", 1)
->where(array(
$db->select->where("name LIKE ?", "bla"),
$db->select->orWhere("description LIKE ?", "bla")
))
但这不起作用(至少我不记得它有效)。
请即可。有人可以帮我找到一种面向对象的方法来嵌套“where” -s
答案 0 :(得分:1)
这是ZF手册中的一个例子
// 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);
它应该符合您的需求
答案 1 :(得分:-3)
构建此查询:
SELECT product_id, product_name, price
FROM "products"
WHERE (price > 100.00)
AND (price < 500.00)
使用此代码:
$minimumPrice = 100;
$maximumPrice = 500;
$select = $db->select()
->from('products',
array('product_id', 'product_name', 'price'))
->where('price > ?', $minimumPrice)
->where('price < ?', $maximumPrice);