使用Zend_Db_Select多个/嵌套“选择位置”

时间:2010-05-08 19:32:35

标签: zend-framework mysql zend-db zend-db-select

  

可能重复:
  Grouping WHERE clauses with Zend_Db_Table_Abstract

我需要创建这样的东西:

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

2 个答案:

答案 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);