2014-05-01 47 views
0
delimiter // 
drop function if exists get_rating; 
create function get_rating(id tinyint(1) unsigned) 
returns tinyint(1) 

begin 
    declare rating int unsigned; 
    declare rating_count int unsigned; 

    select sum(rating), count(rating) 
    into rating, rating_count 
    from comments 
    where review_id = id; 

    return rating_count; 
end // 

delimiter ; 

當我調用該函數時,rating和rating_count都不會返回正確的值(3),它們都返回0,當它應該添加三個值爲1的字段時。爲什麼這不起作用?MySQL選擇多個變量不起作用

+0

你也有名字'id'列在表中'comments'? –

+0

@Ravinder編號從函數聲明中可以看出,它是一個傳入的值。 – boompow

回答

0

當按名稱匹配時,列名和局部變量的名稱會有歧義。
您將rating聲明爲變量,但會計數同名的字段rating並再次指定rating。這是造成含糊不清。

保持它們不同。

更改您的代碼如下:

delimiter // 

drop function if exists get_rating // 

create function 
     get_rating(_id tinyint(1) unsigned) 
     returns tinyint(1) 
begin 
    declare _rating int unsigned; 
    declare _rating_count int unsigned; 

    select sum(rating), count(rating) 
     into _rating, _rating_count 
     from comments 
    where review_id = _id; 

    return _rating_count; 
end; 
// 

delimiter ; 
+0

仍然不起作用... – boompow

+0

您可以在pastbin上發佈示例select *數據並提供鏈接。 –