4

重複の可能性:
Zend_Db_Table_Abstract を使用した WHERE 句のグループ化

次のようなものを作成する必要があります。

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")

すべてのパーツを動的に変更する必要があるためです。クエリは、スクリプトが実行されるたびに構築されます。一部の部分は削除され、一部は変更されます。この例では、より広い範囲を検索する必要がある場合があるため、これらの OR を追加する必要があります。 「My 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")
))

しかし、それは機能しません(少なくとも、機能したことを覚えていません)。

お願いします。誰かが「どこに」をネストするためのオブジェクト指向の方法を見つけるのを手伝ってくれますか-s

4

2 に答える 2

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

それはあなたのニーズに合うはずです

于 2010-05-10T12:58:22.907 に答える
-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);
于 2011-01-01T13:47:11.587 に答える