2013-02-08 38 views
-1

我很慷慨地给出了这个代码建议,以获得每个人的分数排名,有没有方法来声明var而不使用分号?我发现从查询中声明的一个方式,但我无法得到它使用一个子查询时一样的工作,下面:设置MySQL变量不使用分号

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 

回答

3

尝试这样

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 
+0

+1,我错过了;-) – Michael 2013-02-08 12:48:38

+0

谢谢,现在尝试... – user2000718 2013-02-08 12:49:47

+0

我仍然在尝试,但我没有得到任何值。该命令运行时没有错误,但没有输出。可能只是我对MySQL的无能...... – user2000718 2013-02-08 13:10:11

1

如果你想改变的分隔符(如以这样的// ),你应该做这样的:

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

MySQL需要一个分隔符识别,使其能够界定您的复句,否则它也可被不适用于约束规则检查单句正确的语法。

更新

至于评论的响应(OP有兴趣从同一语句一次执行多个查询),虽然我不熟悉PHP,并没有对JDBC,使以addBatch方法对单个语句执行多个quires,

似乎在php mysqli->multi_query也是这样。

对于呈现的情况@echo_me提出了一个优雅的解决方案来避免多个查询,对于其他人你应该考虑multi_query。

+0

感谢有关分隔符技巧中,我读到有关较早,但它并不完全是我需要做的。我特别需要删除它的多重查询方面... – user2000718 2013-02-08 12:41:45

+0

@ user2000718,你是否希望这样做是由于jdbc语句的io约束? – Michael 2013-02-08 12:42:43

+0

非常接近!它用于运行PHP和Mysql而不是MySQLi的传统网站。否则,我可以只使用mysqli_multi_query ...也许在PHP中使用两个查询连接? – user2000718 2013-02-08 12:45:35