2011-06-04 60 views
1
delimiter // 
create procedure rankPagesLive() 
BEGIN 
    SET @r=0; 
    UPDATE pageslive SET Rank= @r:= (@r+1) ORDER BY fan_count DESC; 
END // 
delimeter ; 

錯誤'創建一個存儲過程#1064 - 你必須在 您的SQL語法錯誤;檢查手冊中 相當於你的MySQL服務器 版本使用 接近正確的語法 '分隔符//創建過程 rankPagesLive()BEGIN SET @ R = 0' 在行1MySQL服務器犯規通過phpMyAdmin的


怎麼了?

回答

0

的問題是與phpMyAdmin,而不是與SQL代碼,delimiter標識不通過SQL查詢允許的(大概只有我的服務器上),

我通過SSH登錄到MySQL服務器之後 - 它工作得很好。

感謝您的貢獻。

2

最後一行應該是:

delimiter ; 
+0

+1。我沒有看到它。 :) – 2011-06-04 18:21:31

+0

@rkcell:'delimiter',而不是'delimeter'。請注意「我」而不是「e」。 – 2011-06-06 12:59:12

+1

哦...你是對的...但提到的問題開始在第1行 - phpMyAdmin不允許使用'delimiter'))) – rkcell 2011-06-07 06:44:02

0

可以在某種程度上使用一個這樣的查詢

update pageslive as p 
inner join (
select @r:[email protected]+1 as rn,id 
    from pageslive,(select @r:=0) as r order by fan_count desc 
    ) as t 
on p.id = t.id 
set rank = rn 

但恕我直言我會避免存儲在表中的計算的字段。您可以隨時通過簡單的選擇獲取該值。

+0

正如我所提到的,服務器不創建通過phpMyAdmin的過程... – rkcell 2011-06-06 12:53:30