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