2013-02-08 70 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