我在codeigniter中使用MVC,我有一个MySql表,其中包含用户 page_id 和主题 topic_number 的页面,如下图所示(表格页面)。页面可以有多个主题编号。
我还有另一张名为表格页面的表格(如下图所示)。此表还包含 page_id 和 topic_number ,但它还有两个字段,类似和 user_who_liked_topic_number 。< / p>
我的问题在于,我想显示所有或者没有喜欢的主题编号。但是,如果我只从 Table_page_likes 中获取主题编号,我将不会获得没有记录任何喜欢的topic_numbers。这就是我使用两个表的原因。
从数据库中提取第一个表,其中打印出所有Topic_number。然后在 table_pages_like 中搜索每个Topic_number,以查找它是否有任何相似的记录,并将其显示在Page_id和topic_number旁边。
这是我的代码到目前为止,但我不知道如何执行第二步,即从表 table_page_likes
获取任意数量的喜欢的每个page_idcontroller_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; ?>
提前致谢
答案 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>