1

mu ZF2 プロジェクトには、TableGateway を使用したモデルがあります。検索基準 (city、postal_code、range、type) に基づいてオブジェクトをフェッチする内部関数。

通常、単純にデータの行をフェッチします

$rowset = $this->tableGateway->select($where); 

私のMySQLデータベースには、ジオコーディングされた都市座標の範囲内のすべてのobject_idを返すプロシージャGetObjectsInCityRange(city, range)があります

where句の条件を追加するつもりです:

WHERE object_id IN (call GetObjectsInCityRange(city, range))

MySQLで可能ですか?$where配列要素を正しく記述して機能させるにはどうすればよいですか?

4

2 に答える 2

1

where()select オブジェクトでメソッドを呼び出してin()戻り値を呼び出したり、where ステートメントを作成したりできます。

例えば

$select = new Select();
$select->from($this->tableName)->columns(array($expression));
$where = new Where();
$where->in($identifier, $valueSet);
// or
$where->addPredicate(
    new Predicate\In($identifier, $valueSet)
);
// and then
$select->where($where);

それをselectオブジェクトに追加します。

以下のリンクはまさに​​あなたが必要としているものです:) http://framework.zend.com/manual/2.1/en/modules/zend.db.sql.html#in-identifier-array-valueset-array

お役に立てれば :)

于 2013-03-24T09:45:35.797 に答える
0

MySQL の場合、関数は任意の SQL クエリで使用できるため、プロシージャの代わりに関数を使用することをお勧めしますが、プロシージャ自体はステートメントのようなクエリです。元。

call MyPrcedure();

SET var = MyFunction();

したがって、ほとんどの場合、クエリで関数を呼び出すことができます。ただし、私の知識によると、関数は varchar、int float などの有効な mysql データ型を返します。そのため、In クエリでクエリ行を使用できない場合があります。次に、クエリを実行してプロシージャロジックをサブクエリに変換し、IN ステートメント内に渡す唯一の方法です。

WHERE object_id IN (SUB_QUERY)
于 2013-03-25T20:09:00.883 に答える