为什么它会给我这个通知?

时间:2011-06-08 19:07:44

标签: php sql

谁做:

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`)
)

5 个答案:

答案 0 :(得分:2)

该字段的名称为avg(r.rating)而不是avg

所以$post['avg(r.rating)']是正确的(假设您将查询结果存储在$ post中),而$post['avg']会返回警告,因为该索引(avg)永远不会被设置或在任何地方定义。

答案 1 :(得分: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作为别名,因为这是一个保留字。

答案 2 :(得分:1)

您收到该通知是因为您的avg数组中的$post索引未定义。请注意,这与HTTP Post数据$_POST中的数据不同。

答案 3 :(得分: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']

答案 4 :(得分:-3)

将其更改为

echo $_POST['avg']