簡體   English   中英

如何僅通過一個SQL查詢打印帖子和評論

[英]How to print posts and comments with only one sql query

是否可以通過一個sql查詢打印(PHP)我的所有博客文章和相關注釋?

如果是這樣,怎么辦?

我在朝這個方向思考:

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

但這並沒有達到我的預期

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

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

如果您使用的是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

我能想到的最簡單的方法是遍歷所有返回的行,並將它們分組到一個關聯數組中,其中鍵是帖子ID。 然后,您可以遍歷該關聯數組並為每個帖子打印注釋,並從組的第一行中獲取帖子標題。

當獲取數據時,只需使用字段名稱,例如:$ 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

對於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

“但是這並沒有達到我的預期”

...但是您沒有說出您的期望。

假設查詢中的隱式架構是正確的,那么只顯示帖子一次就可以了:

$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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM