-1

各人のスコアによるランキングを取得するためのこのコードの提案を親切に与えられました。セミコロンを使用せずに var を宣言する方法はありますか? クエリ内から宣言する1つの方法を見つけましたが、以下のようなサブクエリを使用すると機能しませんでした:

SET @rank := 0;
SELECT a.name, 
   a.AvScore, 
   @rank := @rank + 1 
FROM   (SELECT name, 
           Avg(score) AS AvScore 
    FROM   results 
    GROUP  BY name) a
ORDER  BY a.AvScore 
4

2 に答える 2

4

そのようにしてみてください

    SELECT a.name, 
           a.AvScore, 
           @rank := @rank + 1 
    FROM   (SELECT name, 
           Avg(score) AS AvScore ,(SELECT @rank :=0) v
    FROM   results 

    GROUP  BY name) a
    ORDER  BY a.AvScore 
于 2013-02-08T12:47:07.950 に答える
1

区切り文字を変更したい場合 (たとえば、 this のようなもの//)、次のようにする必要があります。

mysql> delimiter //
mysql> SET @rank := 0 //

MySQL では、複数の文を区切ることができるように区切り記号の識別が必要です。そうしないと、正しい構文をチェックする制約規則に適用されない単一の文になる可能性があります。

アップデート

コメントへの回答として(OPは同じステートメントから複数のクエリを一度に実行することに興味があります)、私はPHPに精通していませんがaddBatch、単一のステートメントに対して複数のクエリを実行できるようにするJDBCのメソッドがあります。

PHPmysqli->multi_queryでも同じことをしているようです。

提示されたケースでは、@echo_me が複数のクエリを回避するための洗練されたソリューションを提示しました。それ以外の場合は、multi_query を検討する必要があります。

于 2013-02-08T12:39:00.337 に答える