2011-06-08 69 views
1

谁做:它为什么给我这个通知?

echo $post['avg'] 

给我:

Notice: Undefined index: avg in posts.php on line 39 




SELECT p.id, p.message, p.poster, avg(r.rating) 
FROM posts p 
LEFT OUTER JOIN userpostratings r ON p.id = r.postID 
WHERE p.id = 1 
GROUP BY p.id 

CREATE TABLE IF NOT EXISTS `userpostratings` (
`userID` int(10) NOT NULL DEFAULT '0', 
`postID` int(10) unsigned NOT NULL DEFAULT '0', 
`rating` int(2) NOT NULL DEFAULT '0', 
KEY `userPostRatings_userID` (`userID`), 
KEY `userPostRatings_postID` (`postID`) 
) 

CREATE TABLE IF NOT EXISTS `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`message` text, 
`poster` int(10) unsigned NOT NULL DEFAULT '0', 
`posted` int(10) unsigned NOT NULL DEFAULT '0', 
`topic_id` int(10) unsigned NOT NULL DEFAULT '0', 
PRIMARY KEY (`id`) 
) 
+0

您的意思是'$ _POST'? – 2011-06-08 19:09:06

回答

2

的字段命名为avg(r.rating)avg

因此$post['avg(r.rating)']将是正确的(假设您将查询结果存储在$ post中),而$post['avg']将返回警告,因为该索引(avg)从未在任何位置设置或定义。

1

由于您的$post阵列中的avg索引未定义,因此您会收到该通知。请注意,这与您的HTTP Post数据$_POST中的数据不同。它

-3

更改为

echo $_POST['avg'] 
+1

-1这不是来自表格。 – Belinda 2011-06-09 14:21:43

2

使用别名在查询使名称更加友好,就像这样:

SELECT p.id, p.message, p.poster, avg(r.rating) AS avg_rating 
FROM posts p LEFT OUTER JOIN userpostratings r ON p.id = r.postID WHERE p.id = 1 GROUP BY p.id 

不要使用avg作为别名,因为这是一个保留字。

0

如前所述实际的字段名称为“AVG(r.rating)”,通常最好调整你的SQL就像这样:

SELECT p.id, p.message, p.poster, avg(r.rating) as avgr 
FROM posts p 
LEFT OUTER JOIN userpostratings r ON p.id = r.postID 
WHERE p.id = 1 
GROUP BY p.id 

那么你可以参考与更多的函数的结果可读“

echo $post['avgr'] 
相关问题