不使用分号设置MySQL变量

时间:2013-02-08 12:36:04

标签: mysql

我很慷慨地给出了这个代码建议来获得每个人的得分排名,有没有办法在不使用分号的情况下声明var?我发现了一种在查询中声明的方法,但在使用如下的子查询时我无法使其工作:

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 

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:1)

如果您想更改分隔符(例如更改为//之类的内容),您应该这样做:

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

MySQL需要一个分隔符标识,以便它能够分隔你的多个句子,否则它也可以是一个不适用于约束规则检查正确语法的单个句子。

<强>更新

作为对评论的回应(OP有兴趣从同一语句执行一次多个查询),虽然我不熟悉PHP,并且有addBatch方法可以执行多个quires for JDBC单一陈述,

似乎在php mysqli->multi_query中也是如此。

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