2016-07-21 10 views
1

質問魔女にはセットがあります。どのようにphp? でこのクエリを使用することができますphpmyadminまたはworkbenchで結果が正しいですが、phpコードで応答がありません。phpでのクエリの記述方法

set @num := 0, @ci := -1; 
select currency_id,buy,sell 
from 
    (select *, 
    @num := if(@ci = currency_id, @num + 1, 1) as gp_number, 
    @ci := currency_id as dummy 
    from currency_price 
    order by `currency_id`, cu_date desc,buy,sell) x 
where gp_number=2 
order by currency_id 

$conn->queryに入れたい場合は何もしません。

多くの方法を試しましたができません

+0

有効に複数のクエリ – RamRaider

+0

'mysqli'を使用している場合は、' multiquery'メソッドを利用できます。もしPDOならば、 'PDO :: ATTR_EMULATE_PREPARES'接続で属性を設定することができます。 – RamRaider

答えて

1

@RamRaiderが正しいです。ここでは2つのクエリがあります。最初は、set操作を使用している例の先頭の行で、2番目の操作はクエリ自体です。

phpmyadminは、クエリのリストに出会ったときに丁寧にそれらを順番に実行します。しかし、さまざまなPHP MySQL APIはそうではありません。 $conn->query()を別々に使用して各クエリを実行する必要があります。

これをリファクタリングして、1つのクエリに収まるようにすることができます。 MySQLの方言では、この:

SET @a :=1 ; 
SET @b := 1; 
SELECT @a := a+1 a, 
     @b := b-1 b, 
     col, col, col 
    FROM table 

は次のように初期化「テーブル」に参加することでリファクタリングすることができます。

SELECT @a := a+1 a, 
     @b := b-1 b, 
     col, col, col 
    FROM table 
    JOIN (SELECT @a := 1, @b := 1) init 

限り、それは登録しようとして、それにクエリプランナをON条件を持っていません初期化の選択は一度だけ実行されます。

+0

もっとexplaneできます。 ? またはこれらの2つのクエリを私のために1つのクエリに書き込むことができますか? –

+0

@SoheilAraei - 最初はクエリの基本構造であり、1つ以上のステートメントです。基本的なphp mysqlクエリ関数は、単一の文だけを処理します(これは、非常に基本的で、SQLインジェクションに対しては非常に貧弱です)。 2番目のステートメントは、サブクエリ(クエリの実行時に最初に実行される)にジョインされ、変数はサブクエリで初期化されます。 – Kickstart

関連する問題