1

navicatで実行しようとすると、変数を使用するクエリがあります。これはうまく機能します。しかし、何らかの理由で、Yiiで実行する際に問題が発生します。

私はこのコードを使用します:

$connection = Yii::app()->db;
$sql = "
select  s.name, s.type
from    (
        select  *
        ,       (@rn := if(@cur=type, @rn+1, 1)) as rn
        ,       @cur := type
        from    games
        join    (select @cur := '') i
        order by
                type
        ) s
where   rn <= 10 ";

$command = $connection->createCommand($sql);
$results = $command->queryAll();

このクエリでは、各ゲームタイプから10個のゲーム名を選択する必要があります。navicatで実行するとどうなるか、サイトで試してみると、ゲームタイプごとに1つのゲーム名しか返されません。誰かがそれが起こる理由を知っていますか?それを修正する方法は?多分それを基準でどのように実行しますか?私を助けてください。

ところで、私がこのクエリ(tnxからAndomar)を使用する理由は、他のクエリが多くのリソースを消費するためです。

4

1 に答える 1

3

それはYii問題ではありません。pureを使用するPDOと、このSQLは1行のみを返します。サブクエリの結果を分析すると、@rn変数が前の値を格納していないことに気付きましたが、格納していまし@curた。そこで、変数joinを初期化するためにを追加しました。@rn

次のように変更SQLします。

$connection = Yii::app()->db;
$sql = "
select  s.name, s.type
from    (
        select  *
        ,       (@rn := if(@cur=type, @rn+1, 1)) as rn
        ,       @cur := type
        from    games
        join    (select @cur := '') i
        join    (select @rn := '') j
        order by
                type
        ) s
where   rn <= 10 ";

$command = $connection->createCommand($sql);
$results = $command->queryAll();
于 2013-02-14T19:58:54.277 に答える