簡體   English   中英

CodeIgniter:在一個循環中顯示來自兩個表的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM