Php 将DB查询结果插入控制器-CODEIGNITER中的变量
我有两张桌子 “决赛选手”表列出了决赛选手以及ID、姓名等字段。 选票表,用于存储决赛选手的选票。 投票表中“确认”字段为“是”的一行表示一票 为了获得某个决赛选手的票数,我参加了竞选Php 将DB查询结果插入控制器-CODEIGNITER中的变量,php,mysql,codeigniter,templates,variable-assignment,Php,Mysql,Codeigniter,Templates,Variable Assignment,我有两张桌子 “决赛选手”表列出了决赛选手以及ID、姓名等字段。 选票表,用于存储决赛选手的选票。 投票表中“确认”字段为“是”的一行表示一票 为了获得某个决赛选手的票数,我参加了竞选 $this->db->where('finalist_id', $finalist_id); $this->db->where('confirmed', 'yes'); $query = $this->db->get('votes'); return $query->nu
$this->db->where('finalist_id', $finalist_id);
$this->db->where('confirmed', 'yes');
$query = $this->db->get('votes');
return $query->num_rows();
这就得到了行数
现在我想做的是循环我的决赛选手,列出他们的名字,他们的ID和他们的投票数,但我正在努力在我的控制器中编写代码
我的控制器:
$this->load->database();
$query = $this->db->get('finalists');
$data['finalists'] = $query->result_array();
$this->db->where('finalist_id', $finalist->id);
$this->db->where('confirmed', 'yes');
$query = $this->db->get('votes')
$data['votes'] = $query->result_array();
$this->template
->build('admin/listing', $data);
我的看法是:
<?php foreach ($finalists as $finalist): ?>
<li>ID:<?php echo $finalist['id'] ?>, Name:<?php echo $finalist['name'] ?>, votes:<?php echo $finalist['votes'] ?></li>
<?php endforeach ?>
ID:,姓名:,投票:
因此,我试图实现的是将关键投票及其结果添加到array$决赛中——显然是正确的,我不知道如何做到这一点
我想我应该循环浏览决赛选手,并以某种方式插入该决赛选手的查询结果
如果有任何帮助,我们将不胜感激。请在控制器中尝试此功能
$this->load->database();
$this->db->select('*');
$this->db->from('finalists');
$this->db->join('votes',finalists.id = votes.finalist_id);
$this->db->where('votes.confirmed', 'yes');
$query = $this->db->get();
$data['finalists'] = $query;
$this->template->build('admin/listing', $data);
这将改变你的观点
<?php foreach ($finalists->result() as $finalist){ ?>
<li>ID:<?php echo $finalist->id; ?>, Name:<?php echo $finalist->name; ?>, votes:<?php echo $finalist->votes; ?></li>
<?php } ?>
ID:,姓名:,投票:
更新首先处理原始SQL查询,然后您就可以了解如何在codeigniter中实现。您必须首先了解join。像这样的事情应该让你开始:
SELECT f.id, f.name, COUNT(v.confirmed) AS votes
FROM finalists AS f
INNER JOIN votes AS v
ON f.id = v.finalist_id
WHERE v.confirmed = 'yes'
GROUP BY f.id
这个链接应该让您更好地了解如何使用codeigniter的ActiveRecord类形成更复杂的查询。Ellisab.com/codeigniter/user-guide/database/active_-record.html您不想循环查询每个入围者。您需要了解的是如何将table
JOIN
和SUM()
函数与groupby
结合使用。这可以让您在单个查询中获得整个结果集。虽然我没有使用codeigniter,但我确信有关于如何实现这一点的文档。问题是,我需要从其中一个表中获取的数据只是特定查询返回的行数。我认为你是对的,在一个查询中它一定是可能的,但我不知道如何实现。我考虑过循环查询最终用户查询的结果,并查询每个ID的行数,以便将其与最终用户的其他详细信息一起推送到$data数组中。首先处理原始SQL查询,然后再找出如何在codeigniter中实现。您必须首先了解join。类似于SELECT f.id,f.name,COUNT(v.confirmed)AS vows FROM finalists AS f.id=v.finalists\u id,其中v.confirmed='yes'GROUP BY f.id
的内容应该可以让您开始。这个链接应该让您更好地了解如何使用codeigniter的ActiveRecord类形成更复杂的查询。嘿,迈克,很好,谢谢你。有投票分组的方式吗?我试过了,但上面说没有这样的专栏。。。您想将您的评论作为答案,以便我将其标记为正确答案吗?不能使用$finalist->id,因为它不引用任何$finalist->id包含您的id的内容,因为我现在使用的是result()在foreachMessage中:未定义变量:finalist-尝试获取非对象的属性-致命错误:无法将stdClass类型的对象用作arrayok,然后告诉我您的Finalits
表的主键是什么?主键是“id”