谁做:
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 :(得分: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']