2013-01-13 40 views
0

我應該在帖子正文中顯示評論數字。但後身是在while,如果我把評論num查詢,而頁面,而是沉重!如何將查詢放在一邊,但我們在一邊嗎?

我想要做的,但不工作:

$comments_data = mysql_query("SELECT * FROM `comments` WHERE `blogid`='$bid' AND `postid`='$postid'") or die(mysql_error()); 
$coments_num = mysql_num_rows($comments_data); 

if($post_query) { 
    while($post_data = mysql_fetch_array($post_query)) { 
     $postid = $post_data['id']; 
     $post_temp = $post; 
     $post_temp = str_replace('[post_comments]',$coments_num,$post_temp); 
     $posts .= $post_temp; 
    } 
} 

但如果我用這樣將工作:(!但到多少查詢)

if($post_query) { 
    while($post_data = mysql_fetch_array($post_query)) { 
     $postid = $post_data['id']; 
     $comments_data = mysql_query("SELECT * FROM `comments` WHERE `blogid`='$bid' AND `postid`='$postid'") or die(mysql_error()); 
     $coments_num = mysql_num_rows($comments_data); 
     $post_temp = $post; 
     $post_temp = str_replace('[post_comments]',$coments_num,$post_temp); 
     $posts .= $post_temp; 
    } 
} 

回答

1

如果你只需要帖子中的評論數量,而不是評論內容。然後用COUNT子句的連接查詢中:

$post_query = "SELECT *, COUNT(comment.id) AS comment_num 
FROM post JOIN comment ON comment.post_id = post.id 
GROUP BY post.id;" 

if($post_query) { 
    while($post_data = mysql_fetch_array($post_query)) { 
    $postid = $post_data['id']; 
    $comment_num = $post_data['comment_num']; 
    $post_temp = $post; 
    $posts .= $post_temp; 
    } 
} 

檢查Working Demo

+0

我的問題就在這裏!該查詢是在同一時間!巫婆意味着會有這麼多的疑問! – user1968224

+0

只是使用加入我的答案,檢查演示 – Asgaroth

+0

tnx,但我認爲你不明白!評論在另一張桌子! – user1968224

1

在應該很少必須從一個循環內查詢數據庫:它往往可以構建返回查詢所有期望的結果,然後遍歷結果集—這幾乎總是會提高性能。

取代使用一個查詢獲取帖子,遍歷該結果集並使用另一個查詢獲取每個帖子的註釋,將您的表連接在一起;不知道您的架構或看到的SQL您$post_query也不可能是肯定的,但你可能想是這樣的:

SELECT * 
FROM  posts LEFT JOIN comments USING (postid) 
WHERE blogid = '$bid' 
ORDER BY postid 

然後遍歷所有的結果,檢測當你通過檢查遇到一個新的職位postid欄。

+0

我無法使用它!你可以編輯我的代碼嗎? – user1968224

+0

@ user1968224 - 爲什麼你不能使用它?一些細節可能會幫助讀者回答你的問題。 – halfer

相關問題