2017-08-04 69 views
0

我笨中使用MVC加总喜欢和我有如下图所示(表页)图像中具有由用户取得页面PAGE_ID和主题TOPIC_NUMBER一个MySQL表。页面可以有多个主题编号笨显示从MySQL表

我也有另一个表叫表页喜欢(如下图所示)。此表还具有PAGE_IDTOPIC_NUMBER但它有两个字段,这是,user_who_liked_topic_number

enter image description here

我的问题是,我想显示具有或不具有喜欢所有的栏目号码。但是,如果我只从Table_page_likes中获取主题编号,我将无法获取没有任何喜欢记录的topic_numbers。这就是为什么我使用这两个表。

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

这是到目前为止我的代码,但我不知道该怎么办了第二个步骤,这是从表中的任何数量的喜好来获取每个PAGE_ID table_page_likes

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

在此先感谢

回答

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> 
+0

感谢哈维那是非常菜刀。我想测试,但我认为心不是工作监守我不知道如何根据设立新的模式显示它 – mark

+0

尝试以下操作: \t \t 在你的文件名为“controller_page.php”: 功能viewdata(){ \t $ data ['pages'] = $ this-> mode_page-> get_page_likes(); \t $这个 - >负载>视图( 'view_page',$数据;) } 在你的文件名为 “view_page.php”: \t

\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t <?的PHP的foreach($页作为$值):>? \t \t \t \t \t​​ \t \t \t​​<?php echo $ value ['tid']; ?> \t \t \t​​<?php if($ value ['likes'])echo $ value ['likes'];其他回声'不喜欢秀'; ?> \t \t \t \t <?php endforeach; ?> \t
页ID主题ID喜欢
Harvey

+0

由于哈维,但我得到一个错误说“无法使用类型的mysqli作为阵列的对象”,因为“​​?”上的观点页。我尝试了一个不同的表,但仍然得到相同的错误。任何想法交配? – mark