[英]CodeIgniter: Displaying data from two tables in a view - use one loop?
[英]CodeIgniter: Displaying data from two tables in one loop
假設我有以下兩個數據庫表:
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慣例,我將如何做到這一點?
這是有關模型方法的兩個建議:第一個對每個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; ?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.