假设我有这两个数据库表:
blog comments
------- ----------
blog_id comment_id
title blog_id
content comment
现在我想浏览3个最新的博客条目,并显示该条目的标题,内容和评论数量。
为此,我创建了一个 Blog_model :
function get_entries($n)
{
if ($n < 1) {$n = 1;}
$this->db->order_by("blog_id", "desc");
$q = $this->db->get('blog', $n);
if($q->num_rows() > 0)
{
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
}
模型加载到控制器中并传递给视图:
$this->load->model('Blog_model');
$data['blog_rows'] = $this->Blog_model->get_entries(3);
$this->load->view('blog_view');
这给了我三个最新的博客条目。我现在可以遍历行并在视图中显示内容,如下所示:
<?php foreach ($blog_rows as $row): ?>
<h2><?=$row->title;?></h2>
<a href="#" class="comments">12></a>
<p><?=$row->content;?></p>
<?php endforeach; ?>
到目前为止一切顺利。但现在是棘手的部分:
我想显示与显示的博客条目相关的评论数量。我如何实现这一点,坚持CodeIgniter的做法?
答案 0 :(得分:1)
以下是模型方法的两个建议:第一个对每个blod行执行查询,而第二个执行更快的唯一查询。第二个查询未经过测试。
模型1
function get_entries($n)
{
if ($n < 1) {$n = 1;}
$this->db->order_by("blog_id", "desc");
$q = $this->db->get('blog', $n);
if($q->num_rows() > 0)
{
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
foreach($data AS &$blog_e)
{
$q = "SELECT COUNT(*) AS count FROM comments WHERE blog_id = ?";
$query = $this->db->query($q,array($blog_e->blog_id);
$ncomments = $query->result_array();
$blog_e->n_comments = $ncomments[0]['count'];
}
}
模型2
function get_entries($n)
{
if ($n < 1) {$n = 1;}
$q = "SELECT blog.blog_id,title,content,COUNT(comment_id) AS n_comments
FROM blog JOIN comments ON blog.blog_id = comments.blog_id
GROUP BY blog.blog_id,title,content
ORDER BY blog.blog_id DESC
LIMIT 0,?"
$query = $this->db->query($q,array($n));
if($query->num_rows() > 0)
{
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
}
查看强>
<?php foreach ($blog_rows as $row): ?>
<h2><?=$row->title;?></h2>
<a href="#" class="comments"><?=$row->n_comments?>></a>
<p><?=$row->content;?></p>
<?php endforeach; ?>