1

zendフレームワークを使用して、IN句を持つクエリを使用しました。これが私のクエリです。

       $select->where('p.brandid  IN (?)',$details[brand]);

上記のクエリでは、$ details [brand]の値はこのarray(1,2,3)のようになっています。

実際、クエリは、この配列(1,2,3)にすべて関連するすべての値を返す必要があります。

しかし、私のクエリは、上記の配列(1,2,3)に存在する最初の値に関連する結果を返しています。つまり、1だけで他の2,3は考慮されません。

このクエリを印刷すると、次のように表示されます

             [where] => Array
               (
                [0] => (p.brandid  IN ('1,2,3'))
              )

誰かが私が犯した間違いやこれに対する解決策を教えてもらえますか?

4

4 に答える 4

1

これは、 PHPでimplode関数を使用するp.brandid IN ('1,2,3')代わりに、クエリが誤って形成されているためです。p.brandid IN (1,2,3)

$select->where('p.brandid  IN (?)',implode(",",$details[brand]));
于 2012-07-20T06:48:58.583 に答える
1

私は同じ問題を抱えているので、ほんの小さな研究です。

使用しているZendのバージョンがわかりません。しかし、@Omeshによって提供されるソリューションは私のバージョン1.12では機能しません。

私の場合、それは完全に反対のexplode解決策です:

$select->where('p.brandid  IN (?)', explode(',',$details[brand]));

おそらくそれはのタイプに依存し$details['brand']ます。私の場合、私はのような文字列を持っています555,666,777,877。しかし、そこに配列があるとしても。Zendがあなたのケースstring(の結果implode)を受け入れ、を受け入れない場合、それは奇妙ですarray。そして私の場合、それは受け入れませんstringが、受け入れarrayます。

于 2015-10-15T21:08:52.313 に答える
0

Zendフレームワークに従ってこれを変更できます

locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>0
于 2012-07-20T06:50:36.133 に答える
0

使用するだけ

$select->where->in('field_name', $your_simple_array);

where()以前に何か基準のある関数を 使用している場合、

$select->where(['field_name' => $value]);

その後の最初のものを使用してください

$select->where(['field_name' => $value]);
$select->where->in('field_name', $your_simple_array);

where関数としてではなくwhere()、キーワードとして使用することを常に忘れないでください。

これは有効であり、次のコンテキストで私がテストしました。

$select = $this->tableGateway->getSql()->select()->where(['field1' => $v1, 'field2' => $v2]);
$select->where->in('field_name', ['v1', 'v2', 'v3']);

つまり、モデルクラスの最初にこれらのライブラリを使用します。

use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;
于 2019-07-19T20:18:21.290 に答える