【问题标题】:Codeigniter displaying total added likes from mysql tableCodeigniter 显示来自 mysql 表的总添加喜欢
【发布时间】:2017-08-04 13:24:20
【问题描述】:

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

我还有另一个名为 table page likes 的表格(如下图所示)。此表也有 page_idtopic_number,但它还有两个字段,即 likeuser_who_liked_topic_number

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

第一个表是从打印出所有 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; ?>

提前致谢

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    您可以将模型方法简化为如下所示,而不是创建和调用两个方法来显示喜欢:

    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>
    

    【讨论】:

    • 谢谢哈维,这很聪明。我正在尝试对其进行测试,但我的视图不起作用,因为我不确定如何根据设置的新模型显示它
    • 尝试以下操作: 在名为“controller_page.php”的文件中: function viewdata() { $data['pages'] = $this->mode_page->get_page_likes(); $this->load->view('view_page', $data;) } 在名为“view_page.php”的文件中:
      Page ID Topic ID th>
    • 谢谢哈维,但由于“ " 在视图页面上。我尝试了不同的表,但仍然出现相同的错误。有什么想法吗?
    • 改用$value-&gt;pid。我目前没有安装 CodeIgniter 来测试它,但只是玩弄它。错误是您的线索,例如“不能将类型的对象用作数组”表明您正在尝试将变量用作数组而不是对象。
    • 嗯,我已经尝试了这一切,我不想成为一个痛苦,但它不起作用哈维。 $value->pid 给出“未定义属性:mysqli::$pid”错误。你可能认为它是我的表结构吗?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签