Php 如何从mySQL数据库输出每个帖子下的完整评论列表?
我一直致力于从WordPress博客中提取数据库内容,并将其显示在外部网站上。基本上,我目前在我的网站上有一个页面,它从我的WordPress数据库中获取所有博客文章,如博客标题、日期和博客内容,并按降序显示它们 现在我想展示我对每个帖子的评论。我在相当长的一段时间内没有做过太多的编程,所以我可能在这里遗漏了一些基本概念。我已经列出了我在php开头运行的select查询,以从表wp_POST和wp_评论中获取我需要的内容 然后我使用for循环,如下所示Php 如何从mySQL数据库输出每个帖子下的完整评论列表?,php,mysql,wordpress,Php,Mysql,Wordpress,我一直致力于从WordPress博客中提取数据库内容,并将其显示在外部网站上。基本上,我目前在我的网站上有一个页面,它从我的WordPress数据库中获取所有博客文章,如博客标题、日期和博客内容,并按降序显示它们 现在我想展示我对每个帖子的评论。我在相当长的一段时间内没有做过太多的编程,所以我可能在这里遗漏了一些基本概念。我已经列出了我在php开头运行的select查询,以从表wp_POST和wp_评论中获取我需要的内容 然后我使用for循环,如下所示 <?php //start a
<?php
//start a loop that starts $i at 0, and make increase until it's at the number of rows
for($i=0; $i< $num_rows; $i++){
//assign data to variables, $i is the row number, which increases with each run of the loop
$blog_permalink = mysql_result($query_result, $i, "post_name");
$blog_date = mysql_result($query_result, $i, "post_date");
$blog_title = mysql_result($query_result, $i, "post_title");
$blog_content = mysql_result($query_result, $i, "post_content");
$blog_permalink = mysql_result($query_result, $i, "post_name");
$blog_comment = mysql_result($query_result, $i, "comment_content");
$blog_comment_author = mysql_result($query_result, $i, "comment_author");
$blog_comment_date = mysql_result($query_result, $i, "comment_date");
//format date
$blog_date = strtotime($blog_date);
$blog_date = strftime("%Y-%m-%d", $blog_date);
//the following HTML content will be generated on the page as many times as the loop runs.
?>
</body>
<div class="post"></div>
<span class="date"> <b><?php echo $blog_date; ?>:</b></code></span><br /><hr />
<b><?php echo $blog_title; ?></b> <br /><br />
<?php echo $blog_content; ?> <br /> <br />
<b><span>Comments</span></b> <br />
<?php echo $blog_comment_date; ?> <br />
<?php echo $blog_comment_author; ?> <br />
<?php echo $blog_comment; ?> <br /><br />
我的代码当前显示带有注释的博客文章。但是,不是在一篇文章下显示所有5条评论,而是在该文章的每个实例中显示博客文章5次,并显示不同的评论
我在for循环中尝试了一些条件if语句,用于在一篇文章中显示所有注释,但没有成功。理想情况下,我希望创建一个条件,例如,如果post_title表的comment_count大于零,则显示comment_content表中该post下的所有注释。任何反馈或有用的提示都将不胜感激。我认为应该有两个查询来限制要获取的数据量,在第一个查询中,我们应该找到最后十篇有评论的文章,在第二个查询中,我们可以通过其父id获取评论并将其添加到数组中,示例如下:
$posts = array();
$SQL = "SELECT p.ID AS post_id, p.post_date, p.post_title, Count(c.comment_ID) AS total
FROM wp_posts AS p
INNER JOIN wp_comments AS c ON p.ID = c.comment_post_ID
WHERE c.comment_approved = 1 AND c.comment_type = ''
GROUP BY p.ID, p.post_date, p.post_title
HAVING total > 0
ORDER BY p.post_date DESC
LIMIT 10";
$result = mysql_query($SQL);
if(mysql_numrows($result))
{
while($row = mysql_fetch_assoc($result))
{
//create empty array for comments
$row['comments'] = array();
$posts[$row['post_id']] = $row;
}
}
mysql_free_result($result);
//check if there is any posts with comments
if($posts)
{
//prepare post ids for IN statement
$ids = implode(', ', array_keys($posts));
$SQL2 = "SELECT c.*
FROM wp_comments AS c
WHERE c.comment_approved = 1 AND c.comment_type = '' AND c.comment_post_ID IN ({$ids})";
$result = mysql_query($SQL2);
if (mysql_numrows($result))
{
while ($row = mysql_fetch_assoc($result))
{
//assign comments to posts
$posts[$row['comment_post_id']]['comments'][] = $row;
}
}
mysql_free_result($result);
}
我认为应该有两个查询来限制要获取的数据量,在第一个查询中,我们应该找到最后十个有注释的帖子,在第二个查询中,我们应该根据其父id获取注释并将其添加到数组中,示例如下:
$posts = array();
$SQL = "SELECT p.ID AS post_id, p.post_date, p.post_title, Count(c.comment_ID) AS total
FROM wp_posts AS p
INNER JOIN wp_comments AS c ON p.ID = c.comment_post_ID
WHERE c.comment_approved = 1 AND c.comment_type = ''
GROUP BY p.ID, p.post_date, p.post_title
HAVING total > 0
ORDER BY p.post_date DESC
LIMIT 10";
$result = mysql_query($SQL);
if(mysql_numrows($result))
{
while($row = mysql_fetch_assoc($result))
{
//create empty array for comments
$row['comments'] = array();
$posts[$row['post_id']] = $row;
}
}
mysql_free_result($result);
//check if there is any posts with comments
if($posts)
{
//prepare post ids for IN statement
$ids = implode(', ', array_keys($posts));
$SQL2 = "SELECT c.*
FROM wp_comments AS c
WHERE c.comment_approved = 1 AND c.comment_type = '' AND c.comment_post_ID IN ({$ids})";
$result = mysql_query($SQL2);
if (mysql_numrows($result))
{
while ($row = mysql_fetch_assoc($result))
{
//assign comments to posts
$posts[$row['comment_post_id']]['comments'][] = $row;
}
}
mysql_free_result($result);
}
联接的工作原理是这样的,即每行上的左表与右表的每一匹配行联接,这是右表匹配行计数的许多倍。您必须以编程方式处理此问题,或者在不同的结果集中获取注释,而joinJOINs的工作方式不是这样的,您将在每一行上获得左表,右表的每一个匹配行与右表匹配行计数的次数相同。您必须以编程方式处理此问题,或者在不同的结果集中获取注释,而无需JoinThank的详细反馈。我将尝试应用与您的示例相同的概念,并让您知道我的结果。感谢Nazary提供的详细反馈。我将尝试应用与您的示例相同的概念,并让您知道我的结果。