-1

我收到了这个代码建议,用于按分数获取每个人的排名,有没有一种方法可以在不使用分号的情况下声明 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 
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

如果您希望更改分隔符(例如更改为这样的//),您应该这样做:

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

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

更新

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

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

对于所呈现的案例,@echo_me 提出了一种避免多次查询的优雅解决方案,对于其他情况,您应该考虑使用 multi_query。

于 2013-02-08T12:39:00.337 回答