Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp查找所有有评论的帖子_Php_Sql_Cakephp - Fatal编程技术网

cakephp查找所有有评论的帖子

cakephp查找所有有评论的帖子,php,sql,cakephp,Php,Sql,Cakephp,我创建了一个简单的博客,上面有帖子和评论。我想找到所有至少有一条评论的帖子,也要找到所有没有评论的帖子。有什么方法可以做到这一点吗?也就是说,可能类似于 $this->Post->find('all', ???); 最后我写了我自己的查询,下面的例子找到了所有至少有一条评论的帖子 SELECT * FROM ( select posts.*, count(comments.id) as comment_count from posts left j

我创建了一个简单的博客,上面有帖子和评论。我想找到所有至少有一条评论的帖子,也要找到所有没有评论的帖子。有什么方法可以做到这一点吗?也就是说,可能类似于

$this->Post->find('all', ???);
最后我写了我自己的查询,下面的例子找到了所有至少有一条评论的帖子

SELECT *
  FROM (
       select posts.*, count(comments.id) as comment_count
        from posts left join comments on posts.id = comments.post_id
        group by posts.id
       ) as T
 WHERE comment_count != 0
但似乎有更好的方法来做到这一点

注意:一篇帖子有很多评论,下面的评论要发布一个解决方案是:

$this->Post->find('all');
正如你所说的,你的关系已经建立好了,评论已经返回了这个信息,你只需要对它们进行计数,然后从那里开始处理。。。比如:

$posts = $this->Post->find('all');
count($posts[0][Comment]);
可能会有一种更优雅的方式——因为我自己是CakePHP新手,但希望这有一些价值

$grouped_comments = $this->Comment->find('all', array('group' => 'Comment.post_id'));
这将为您提供一个按post_id分组的所有评论的数组,因此您将为每个post_id只提供一条评论,这就是您想要的。从那里你可以用这些数据做任何你想做的事情

假设您想发布一个包含所有帖子标题和评论的列表

echo "<H1>Posts with comments:</H1>";
foreach ($grouped_comments as $comment) {
echo $comment['Post']['Title'] . "<br>";
}
echo“带评论的帖子:”;
foreach($comment为$comment){
echo$comment['Post']['Title']。“
”; }

当然,这只有在comment.php模型中设置了模型关系时才有效

我对CakePHP还是相当陌生,但我认为您可以使用counterCache来跟踪Posts表中某个字段中每个Post模型记录的注释数,然后在Find中使用一些简单的条件来获取所需内容。添加/删除子模型记录时,计数器缓存会自动更新父模型记录字段中的缓存计数字段


CakePHP 1.2的counterCache:

我最初有这个想法,但我认为最好让数据库来思考,而不是php,但这个解决方案也可以。谢谢你的回复。这是找到所有有评论的帖子的好方法。你能想出类似的方法来查找所有没有评论的帖子吗?最简单的方法可能是遍历你的帖子表,检查每个帖子是否至少有一条评论与该帖子相关。你必须确保在你的帖子模型中建立了一对多的关系,这样才能起作用。这有意义吗?