2010-01-12 65 views
1

是否可以通過一個sql查詢打印出(PHP)我所有的博客文章+相關評論?如何用一個sql查詢打印帖子和評論

如果是這樣,怎麼樣?

我想在這個方向:

SELECT p.post_id, p.title, c.comment_body 
FROM posts p 
LEFT JOIN comments c 
ON c.parent_id = p.post_id 

但如我所料

+0

爲什麼不按預期工作? – 2010-01-12 14:27:37

+0

您希望結果看起來如何? – 2010-01-12 14:30:40

+0

你明確地將它標記爲mysql/join,但也許你想嘗試http://www.mongodb.org/display/DOCS/PHP+Language+Center'MongoDB(來自「humongous」)是一個可擴展的高性能,開源,無模式,面向文檔的數據庫。「 – VolkerK 2010-01-12 14:45:21

回答

0

我能想到的最簡單的方法是通過所有的行迭代返回,他們這個組沒有奏效轉換爲關聯數組,其中鍵是發佈ID。然後,您可以遍歷該關聯數組並打印每個帖子的評論,從組中的第一行獲取帖子標題。

0

當獲取數據時,只需使用字段名稱: $ result = mysql_query(「SELECT p.post_id,p.title,c.comment_body FROM posts p LEFT JOIN comments c ON c.parent_id = p.post_id」) ;

while($row = mysql_fetch_array($result)) 
    { 
    echo $row['title'] . " " . $row['comment_body']; 
    echo "<br />"; 
    } 

來源:http://www.tizag.com/mysqlTutorial/mysqljoins.php

+0

但是如果有多個評論呢? – Bundy 2010-01-12 14:42:11

+0

對於下一條評論 – Scott 2010-01-12 15:03:33

0

如果你使用MySQL,你可以使用GROUP_CONCAT功能:

SELECT p.post_id, p.title, GROUP_CONCAT(c.comment_body) 
FROM posts 
LEFT JOIN comments c ON c.parent_id = p.post_id 
GROUP BY p.post_id 
0

對於MySQL:

SELECT p.post_id, p.title, GROUP_CONCAT(c.comment_body), count(*) as coment_cnt 
FROM 
    posts p 
     LEFT JOIN comments c ON (p.post_id = c.parent_id) 
GROUP BY 
    p.post_id 
0

「但這並沒有按照我的預期工作「

...但你不說你的期望。

假設在查詢中隱含的模式是正確的,那麼它是沒有道理的,只顯示帖子一次:

$lastpostid=false; 
while ($r=mysql_fetch_assoc($result)) { 
    if ($r['post_id']!=$lastpost) { 
    print "Post: " . $r['title'] . "<br />\n"; 
    $comment_id=1; 
    $lastpost=$r['post_id']; 
    } 
    print "Comment # $comment_id : " . $r['comment_body'] . "<br />\n"; 
    $comment_id++; 
} 

但正如我所說,這意味着你的查詢是正確的(即評論不是分層的)。

C.

4

使用一個SQL查詢不是很方便,因爲您有1個帖子和多個註釋。
將帖子詳細信息添加到每個評論(在組合查詢中)是浪費資源。

獲取帖子的詳細信息並使用帖子的post_id查找屬於該帖子的評論要方便得多。

+0

+1,它應該是$ row ['comment_body'] [1]。這是一個需要兩個查詢的情況 - 這是一個一對多的關係到評論的帖子。只有當它是一對一的關係時,才能嘗試從兩個表中獲取數據並進行連接。 – 2010-01-12 15:14:24

+0

同意。這絕對是一種使用一個查詢沒有意義的情況。 – inxilpro 2010-01-12 15:28:00

+0

我需要這個,因爲我想創建一個包含所有數據的XML文件(所有文章+10個最近的評論/文章)。當你有100個帖子時,我不知道最好的解決方案是什麼。這意味着你必須執行100個SQL查詢? – Bundy 2010-01-12 15:43:19