2011-06-08 107 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'] 
相關問題