Php Codeigniter显示mysql表中添加的喜欢的总数

Php Codeigniter显示mysql表中添加的喜欢的总数,php,mysql,codeigniter,Php,Mysql,Codeigniter,我在codeigniter中使用MVC,我有一个MySql表,其中包含由用户制作的页面page\u id和主题topic\u number,如下图所示(表页)。页面可以有多个主题编号 我还有另一个名为表页likes的表(如下图所示)。此表也有页面id和主题编号,但它还有两个字段,分别是喜欢和喜欢主题编号的用户 我的问题是,我想显示所有有或没有喜欢的主题编号。但是如果我只从表\u页面\u likes中获取主题编号,我将不会获取没有任何likes记录的主题编号。这就是为什么我使用这两个表 第一个表

我在codeigniter中使用MVC,我有一个MySql表,其中包含由用户制作的页面page\u id和主题topic\u number,如下图所示(表页)。页面可以有多个主题编号

我还有另一个名为表页likes的表(如下图所示)。此表也有页面id主题编号,但它还有两个字段,分别是喜欢喜欢主题编号的用户

我的问题是,我想显示所有有或没有喜欢的主题编号。但是如果我只从表\u页面\u likes中获取主题编号,我将不会获取没有任何likes记录的主题编号。这就是为什么我使用这两个表

第一个表是从数据库中提取的,所有的主题号都打印出来了。然后在表\u pages\u like中搜索每个主题编号,以查找是否有任何类似的记录,并将其显示在页面id和主题编号旁边

到目前为止,这是我的代码,但我不确定如何执行第二步,即从表表\u页面\u likes中获取每个页面\u id以及任意数量的likes

controller\u page.php

     function viewdata() {
    $data['pages'] = $this->model_page->get_pages();

    $this->load->view('view_page', $data);


}


function get_like($post_id, $topic_number) {

    $data['liked_pages'] = $this->model_page->get_likes_model($post_id, topic_number);

    $this->load->view('view_page', $data);


}
       function get_pages() {

    $query = $this->db->get_where('table_pages');
    return $query->result_array();

}

 function get_likes($page_id, $topic_number) {

        $query = $this->db->get_where('table_pages_likes', array('page_id' => $page_id , 'topic_number' => $topic_number));

}
              <?php foreach($pages as $value): ?>
      <tr>
        <td><?php echo $value['page_id']; ?></td>
        <td><?php echo $value['topic_number']; ?></td>

                <?php foreach($liked_pages as $value): ?>
                    <td><?php echo $value['page_id']; ?></td>
                    <td><?php echo $value['topic_number']; ?></td>
                    <td><?php echo $value['like']; ?></td>
                <?php endforeach; ?>
      </tr>
      <?php endforeach; ?>
model_page.php

     function viewdata() {
    $data['pages'] = $this->model_page->get_pages();

    $this->load->view('view_page', $data);


}


function get_like($post_id, $topic_number) {

    $data['liked_pages'] = $this->model_page->get_likes_model($post_id, topic_number);

    $this->load->view('view_page', $data);


}
       function get_pages() {

    $query = $this->db->get_where('table_pages');
    return $query->result_array();

}

 function get_likes($page_id, $topic_number) {

        $query = $this->db->get_where('table_pages_likes', array('page_id' => $page_id , 'topic_number' => $topic_number));

}
              <?php foreach($pages as $value): ?>
      <tr>
        <td><?php echo $value['page_id']; ?></td>
        <td><?php echo $value['topic_number']; ?></td>

                <?php foreach($liked_pages as $value): ?>
                    <td><?php echo $value['page_id']; ?></td>
                    <td><?php echo $value['topic_number']; ?></td>
                    <td><?php echo $value['like']; ?></td>
                <?php endforeach; ?>
      </tr>
      <?php endforeach; ?>
查看页面.php

     function viewdata() {
    $data['pages'] = $this->model_page->get_pages();

    $this->load->view('view_page', $data);


}


function get_like($post_id, $topic_number) {

    $data['liked_pages'] = $this->model_page->get_likes_model($post_id, topic_number);

    $this->load->view('view_page', $data);


}
       function get_pages() {

    $query = $this->db->get_where('table_pages');
    return $query->result_array();

}

 function get_likes($page_id, $topic_number) {

        $query = $this->db->get_where('table_pages_likes', array('page_id' => $page_id , 'topic_number' => $topic_number));

}
              <?php foreach($pages as $value): ?>
      <tr>
        <td><?php echo $value['page_id']; ?></td>
        <td><?php echo $value['topic_number']; ?></td>

                <?php foreach($liked_pages as $value): ?>
                    <td><?php echo $value['page_id']; ?></td>
                    <td><?php echo $value['topic_number']; ?></td>
                    <td><?php echo $value['like']; ?></td>
                <?php endforeach; ?>
      </tr>
      <?php endforeach; ?>


提前感谢

您可以将模型方法简化为如下所示,而无需创建和调用两种方法来显示喜欢的内容:

class model_page extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function get_page_likes() {
        $qry = $this->db->query("SELECT p.id, p.tid, IF(SUM(pl.like) > 0, SUM(pl.like), 0) AS likes FROM pages AS p LEFT JOIN page_likes pl ON p.id = pl.pid AND p.tid = pl.tid GROUP BY p.tid, p.id HAVING likes >= 0 ORDER BY p.id, p.tid");
        return $qry->result_array();
    }
}
上面的查询认为您有如下类似的表(此处尚未标识索引):

并具有以下样本数据:

pages:
    id     tid  
------  --------
    11         1
    11         2
    11         3
    12         1
    12         2

page_likes
   pid     tid    like  
------  ------  --------
    11       1         1
    11       1         1
    11       1         1
    12       2         1
上述查询将为您提供如下结果:

id     tid  likes   
------  ------  --------
    11       1  3       
    11       2  0       
    11       3  0       
    12       1  0       
    12       2  1               
希望这有帮助

编辑: -以上编辑方法

在控制器上:

public function index()
{
    $data['pages'] = $this->model_page->get_page_likes();
    $this->load->view('view_page', $data);
}   
在你看来:

<table>
    <tr>
        <th>Page ID</th>
        <th>Topic ID</th>
        <th>Likes</th>
    </tr>
    <?php foreach($pages as $value): ?>
      <tr>
        <td><?php echo $value['id']; ?></td>
        <td><?php echo $value['tid']; ?></td>
        <td><?php if ($value['likes']) echo $value['likes']; else echo 'no likes to show'; ?></td>
      </tr>
    <?php endforeach; ?>
</table>

页面ID
主题ID
喜欢

您可以将模型方法简化为如下所示,而无需创建和调用两种方法来显示喜欢的内容:

class model_page extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function get_page_likes() {
        $qry = $this->db->query("SELECT p.id, p.tid, IF(SUM(pl.like) > 0, SUM(pl.like), 0) AS likes FROM pages AS p LEFT JOIN page_likes pl ON p.id = pl.pid AND p.tid = pl.tid GROUP BY p.tid, p.id HAVING likes >= 0 ORDER BY p.id, p.tid");
        return $qry->result_array();
    }
}
上面的查询认为您有如下类似的表(此处尚未标识索引):

并具有以下样本数据:

pages:
    id     tid  
------  --------
    11         1
    11         2
    11         3
    12         1
    12         2

page_likes
   pid     tid    like  
------  ------  --------
    11       1         1
    11       1         1
    11       1         1
    12       2         1
上述查询将为您提供如下结果:

id     tid  likes   
------  ------  --------
    11       1  3       
    11       2  0       
    11       3  0       
    12       1  0       
    12       2  1               
希望这有帮助

编辑: -以上编辑方法

在控制器上:

public function index()
{
    $data['pages'] = $this->model_page->get_page_likes();
    $this->load->view('view_page', $data);
}   
在你看来:

<table>
    <tr>
        <th>Page ID</th>
        <th>Topic ID</th>
        <th>Likes</th>
    </tr>
    <?php foreach($pages as $value): ?>
      <tr>
        <td><?php echo $value['id']; ?></td>
        <td><?php echo $value['tid']; ?></td>
        <td><?php if ($value['likes']) echo $value['likes']; else echo 'no likes to show'; ?></td>
      </tr>
    <?php endforeach; ?>
</table>

页面ID
主题ID
喜欢

谢谢你,哈维,你真是个聪明人。我正在尝试测试它,但我的视图不起作用,因为我不确定如何根据新的模型设置显示它:在名为“controller_page.php”的文件上:函数viewdata(){$data['pages']=$this->mode_page->get_page_likes();$this->load->view('view_page',$data;)}在名为“view_page.php”的文件上:Page ID Topic ID like谢谢Harvey,但我收到一条错误消息,说“不能将mysqli类型的对象用作数组”,因为“视图”页上有“”。我尝试了不同的表,但仍然得到相同的错误。有什么想法吗?试试
$value->pid
。我目前还没有安装CodeIgniter来测试这个,只是随便玩一下。错误是你的线索,比如,“不能将类型为数组的对象用作数组”表明你试图将变量用作数组而不是对象。嗯,我都试过了,我不想成为一个痛苦的人,但它不起作用,Harvey$值->pid给出“未定义属性:mysqli::$pid”错误。你可能认为这是我的桌子结构吗?谢谢,哈维,这真是太棒了。我正在尝试测试它,但我的视图不起作用,因为我不确定如何根据新的模型设置显示它:在名为“controller_page.php”的文件上:函数viewdata(){$data['pages']=$this->mode_page->get_page_likes();$this->load->view('view_page',$data;)}在名为“view_page.php”的文件上:Page ID Topic ID like谢谢Harvey,但我收到一条错误消息,说“不能将mysqli类型的对象用作数组”,因为“视图”页上有“”。我尝试了不同的表,但仍然得到相同的错误。有什么想法吗?试试
$value->pid
。我目前还没有安装CodeIgniter来测试这个,只是随便玩一下。错误是你的线索,比如,“不能将类型为数组的对象用作数组”表明你试图将变量用作数组而不是对象。嗯,我都试过了,我不想成为一个痛苦的人,但它不起作用,Harvey$值->pid给出“未定义属性:mysqli::$pid”错误。你认为这是我的桌子结构吗?