Codeigniter显示来自mysql表的总添加的喜欢

时间:2017-08-04 13:24:21

标签: php mysql codeigniter

我在codeigniter中使用MVC,我有一个MySql表,其中包含用户 page_id 和主题 topic_number 的页面,如下图所示(表格页面)。页面可以有多个主题编号

我还有另一张名为表格页面的表格(如下图所示)。此表还包含 page_id topic_number ,但它还有两个字段,类似 user_who_liked_topic_number 。< / p>

enter image description here

我的问题在于,我想显示所有或者没有喜欢的主题编号。但是,如果我只从 Table_page_likes 中获取主题编号,我将不会获得没有记录任何喜欢的topic_numbers。这就是我使用两个表的原因。

从数据库中提取第一个表,其中打印出所有Topic_number。然后在 table_pages_like 中搜索每个Topic_number,以查找它是否有任何相似的记录,并将其显示在Page_id和topic_number旁边。

这是我的代码到目前为止,但我不知道如何执行第二步,即从表 table_page_likes

获取任意数量的喜欢的每个page_id

controller_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);


}

model_page.php

       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));

}

view_page.php

              <?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; ?>

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以将模型方法简化为类似下面的内容,而不是创建和调用两种显示方式的方法:

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();
    }
}

以上查询认为您有以下类似于下面的表(此处未标识索引):

CREATE TABLE `pages` (
  `id` int(11) DEFAULT NULL,
  `tid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `page_likes` (
  `pid` int(11) DEFAULT NULL,
  `tid` int(11) DEFAULT NULL,
  `like` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

并提供以下示例数据:

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>