用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6040|回复: 10
收起左侧

[讨论/交流] 如何在首页统计评论的条数

[复制链接]
发表于 2011-10-8 22:59:04 | 显示全部楼层 |阅读模式
本帖最后由 haoren26 于 2011-10-8 23:00 编辑

CI version:2.0.3

Environment:WAMP2.1      Windows2003

我写了一个博客,首页如下
blog_index.jpg

我现在想添加一个功能,就是在“评论”旁边显示该文章的评论条数,希望的样子是这样“评论(X)”,X为评论条数。

但我在实现的时候遇到了困难,因为首页列出文章的方法是在Model里用$query = $this-db->get('article'),然后把$query 传给Controller,Controller里$data['list_article'] = $this->Mblog->list_article() 然后 传给视图$this->load->view('index_view',$data) 视图再用foreach循环方法列出所有文章,代码如下

index_view.php
PHP复制代码
 
<?php foreach($list_article as $arc_row):?>
        <hr>
        <h2><?=$arc_row->title?></h2>
        <p><?=$arc_row->article_author.' '.$arc_row->post_time?></p>
        <p><?=$arc_row->article_content?></p>
        <p><?=anchor('blog/comment/'.$arc_row->id,'评论')?></p>
        <?php endforeach;?>
 
复制代码


我如果想在“评论”旁显示评论条数,那么我就得在 <p><?=anchor('blog/comment/'.$arc_row->id,'评论')?></p>的"</p>  "标签前面加一个变量,而且必须是循环变量,因为有不止一篇文章,也就是说得再用一个foreach循环。

想想很复杂,
困难1:如何得到一个包含所有文章评论条数的数组;
困难2:foreach循环该放在原来那个foreach循环的外面还是里面,或者,这个例子根本用不了foreach循环?

附上我的数据库结构
'article'表
article.jpg

'comment'表
comment.jpg





发表于 2011-10-8 23:39:24 | 显示全部楼层
这个困难在哪里?你获取当前列表之后获取主题ID查询数据库就行了。
 楼主| 发表于 2011-10-9 10:21:22 | 显示全部楼层
longjianghu 发表于 2011-10-8 23:39
这个困难在哪里?你获取当前列表之后获取主题ID查询数据库就行了。

请指教SQL语句怎么写??
你这样的话需要查询两次是吧?
查询两次得到两个数据集,我就要用两次foreach循环,这两个循环如果嵌套起来。。。我觉得不现实
最好是一次查询得到一个记录集,这样就好了
发表于 2011-10-9 10:58:47 | 显示全部楼层
还有一个更简单的方法,你设计数据库的时候增加一个评论数的字段,每当一个主题有一个评论的时候就+1,这样就不用重复查询了。这个是你设计的问题
 楼主| 发表于 2011-10-9 12:49:07 | 显示全部楼层
longjianghu 发表于 2011-10-9 10:58
还有一个更简单的方法,你设计数据库的时候增加一个评论数的字段,每当一个主题有一个评论的时候就+1,这样 ...

好办法!已经成功了
发表于 2011-10-15 16:02:10 | 显示全部楼层
haoren26 发表于 2011-10-9 12:49
好办法!已经成功了

Good luck
 楼主| 发表于 2011-10-23 00:07:27 | 显示全部楼层
longjianghu 发表于 2011-10-15 16:02
Good luck

有没有办法在mysql数据库里面设置一个触发器,当comment表里面增加一条记录时,就自动在article表里加1,貌似触发器只支持当前表操作。。就是类似这种功能的东西有没有?
发表于 2011-10-24 08:58:46 | 显示全部楼层
haoren26 发表于 2011-10-23 00:07
有没有办法在mysql数据库里面设置一个触发器,当comment表里面增加一条记录时,就自动在article表里加1, ...

mysql是支持的吧,我用的mysql5
发表于 2011-10-24 15:03:56 | 显示全部楼层
SQL复制代码
SELECT *,(SELECT COUNT(*) FROM comment WHERE article_id=article.id) AS comments FROM article
复制代码


一条sql语句不就都出来了咩....
 楼主| 发表于 2011-11-4 23:00:13 | 显示全部楼层
zhouli520 发表于 2011-10-24 15:03
一条sql语句不就都出来了咩....

啊,很好用!谢谢!

不过我看了wordpress的数据库结构,他的文章表里也有一个评论数的字段,具体的PHP代码还没看,不知道是不是通过php代码去修改评论数字段的值

本版积分规则