我有两个表。
入围者表列出了入围者,其中包含ID、姓名等字段。投票表,用于存储决赛选手的投票。投票表中"已确认"字段为"是"的一行表示一票。
为了获得特定决赛选手的票数,我运行
$this->db->where('finalist_id', $finalist_id);
$this->db->where('confirmed', 'yes');
$query = $this->db->get('votes');
return $query->num_rows();
这就得到了行数。(投票)
现在我想做的是循环浏览我的决赛选手,列出他们的名字、身份证和票数,但我很难在控制器中写代码。
我的控制器:
$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 ?>
因此,我试图实现的是将关键投票及其结果添加到入围者的数组中——显然是正确的,我不知道如何做到这一点。
我想我应该循环浏览决赛选手,并以某种方式插入特定决赛选手的查询结果。
如有任何帮助,我们将不胜感激。
首先处理原始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类来形成更复杂的查询。ellislab.com/codeigner/user-guide/database/active_record.html
在控制器中尝试此操作
$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 } ?>