0

私は次の機能を実行しましたが、正常に動作しています。

public function getLatestCurrencyRates(){
        $sql = new Sql($this->adapter);

        $subselect2 = $sql->select();
        $subselect2->from(array('r1' =>'currency_rates'))
                    ->columns(array('max_c_rate_id' => new Expression('MAX(c_rate_id)')))
                    ->group("currency_id");


        $statement = $sql->prepareStatementForSqlObject($subselect2);
        $result = $statement->execute();
        $rows = array_values(iterator_to_array($result));
        return $rows;
    }

上記のselectステートメントを同じテーブルに結合します。誰かがそれを行う方法を提案できますか?私の現在の実装は次のとおりです。実は完成していません。それを実装するための知識が不足しているためです。

public function getLatestCurrencyRates(){
        $sql = new Sql($this->adapter);

        $subselect2 = $sql->select();
        $subselect2->from(array('r1' =>'currency_rates'))
                    ->columns(array('max_c_rate_id' => new Expression('MAX(c_rate_id)')))
                    ->group("currency_id");


        $subselect3 = $sql->select();
        $subselect3->from("currency_rates")
                    ->join(array('r2'=>$subselect2), 'r2.max_c_rate_id = currency_rates.c_rate_id', array('c_rate_id', 'currency_id', 'buy_rate', 'sell_rate'));



        $statement = $sql->prepareStatementForSqlObject($subselect3);
        $result = $statement->execute();
        $rows = array_values(iterator_to_array($result));
        return $rows;
    }

ここで実装するSQLクエリは次のとおりです。

 select r1.c_rate_id, r2.currency_id, r2.buy_rate, r2.sell_rate 
 from 
 (select max(c_rate_id)as c_rate_id from currency_rates group by currency_id) as r1
 inner join 
 currency_rates as r2
 on 
 r1.c_rate_id = r2.c_rate_id;

誰もが良いフィードバックを与えることができますか、役に立ちます。

ありがとう。

4

2 に答える 2

2

最後に私はそれをやった。

public function getLatestCurrencyRates(){
        $sql = new Sql($this->adapter);

        $subselect2 = $sql->select();
        $subselect2->from(array('r1' =>'currency_rates'))
                    ->columns(array('max_c_rate_id' => new Expression('MAX(c_rate_id)')))
                    ->group("currency_id");


        $subselect3 = $sql->select();
        $subselect3->from(array('r2' => $subselect2))
                    ->join("currency_rates", 'max_c_rate_id = currency_rates.c_rate_id', array('c_rate_id', 'currency_id', 'buy_rate', 'sell_rate'));    

        $statement = $sql->prepareStatementForSqlObject($subselect3);
        $result = $statement->execute();
        $rows = array_values(iterator_to_array($result));
        return $rows;
    }

$select->from() の関連配列を次のように渡しました。

$subselect3->from(array('r2' => $subselect2))
                    ->join("currency_rates", 'max_c_rate_id = currency_rates.c_rate_id', array('c_rate_id', 'currency_id', 'buy_rate', 'sell_rate'));
于 2012-10-22T12:28:38.000 に答える
1

ZF2(Zend\Db\Sql\Select私がこれを書いている時点では)は、のサブクエリのサポートを欠いてい$select->join()ます。$select->columns()それらは&$select->where()(式を使用)でのみ使用できます。

編集

$select->join()サブクエリのサポートが不足しているだけで、$select->from()それを受け入れます。これは、今のところ、サブクエリ全体が識別子として引用されていることを意味します。おそらく、一部の2.0。*バージョンで修正される予定です。

于 2012-10-22T11:57:45.533 に答える