12

私はWebを検索しましたが、良い確かな例を示すものは何も見つかりませんでした。私の質問は基本的にこれです:

これを変換するにはどうすればよいですか?

SELECT * FROM table WHERE((a = 1 AND b = 2)OR(c = 3 OR c = 4))AND d = 5;

これに似た構文をZendするには:

$ this-> select()-> from($ this->_schema。'。'。$this->_ name)-> where('a =?'、 '1');

では、どうすればそれを行うことができますか?

よろしくお願いします。

4

4 に答える 4

15

私も同様の問題を抱えていました。ここでの回答のコード例を参照してください:Zend_Db_Table_Abstractを使用したWHERE句のグループ化

したがって、次のような結果になります。

$db = $this->getAdapter();
$this->select()
     ->where('(' . $db->quoteInto('a = ?', 1) . ' AND ' . $db->quoteInto('b = ?', 2) . ') OR (' . $db->quoteInto('c = ?', 3) . ' OR ' . $db->quoteInto('c = ?', 4) . ')')
     ->where('d = ?', 5);

それはあなたに与えるでしょう:

SELECT `table_name`.* FROM `table_name` WHERE ((a = 1 AND b = 2) OR (c = 3 OR c = 4)) AND (d = 5)
于 2010-04-15T14:21:30.620 に答える
2

1)すべてのグループの条件を作成します。場所/または場所:

$conditions = $this->select()
        ->where('a= ?', 5)
        ->orWhere('b= ?', 6)
        ->getPart(Zend_Db_Select::WHERE);
// result: $conditions = "(a= 5) OR (b= 6)";

getPart()メソッドを使用して、where条件を取得します。

2)次に、現在の選択オブジェクトのwhere部分をリセットします。

$this->select()->reset(Zend_Db_Select::WHERE);

3)最後に、必要に応じてwhere条件を使用します。

$this->select()
    ->where('d= ?', 5)
    ->where(implode(' ', $conditions));

http://framework.zend.com/manual/1.12/ru/zend.db.select.html

于 2014-03-26T14:28:11.970 に答える
1

Zend Framework Webサイトの掲示板の投稿によると、これは不可能な場合があります。

Zend_Db_Selectクラスのwhere()とorWhere()は、すべてのクエリを記述できるほど十分ではないように思われます。条件のネストはサポートされていません。これは、やや複雑なケースでユーザーに抽象化を強制しません。where()とorWhere()ではこれを書くことはできません:

于 2010-04-14T18:51:08.370 に答える
0

編集

の配列機能は、句Zend_Db_Select->whereで使用するためだけに設計されています。IN

Example #17 Example of an array parameter in the where() method
// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (product_id IN (1, 2, 3))

$productIds = array(1, 2, 3);

$select = $db->select()
             ->from('products',
                    array('product_id', 'product_name', 'price'))
             ->where('product_id IN (?)', $productIds);

オリジナル

Pederが言ったように、ネストすることはできませんが、とorWhereに複数の引数を渡すことができます。whereorWhere

$this->select()
  ->from($this->_schema.'.'.$this->_name)
  ->where(' ( a = ? AND b = ? ) OR ( c = ? OR c = ? ) ', array(1,2,3,4))
  ->where('d = ?',array(5));

于 2010-04-14T18:54:28.207 に答える