我有两张桌子。
决赛选手表,其中列出了具有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 ?>
所以我想要实现的是将关键投票及其结果添加到阵列$决赛选手中 - 显然是正确的,我无法理解如何做到这一点。
我想我应该遍历决赛选手并以某种方式插入该特定决赛选手的查询结果。
任何帮助都将不胜感激。
答案 0 :(得分:0)
在控制器中试试这个
$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 } ?>
答案 1 :(得分:0)
首先处理原始SQL查询,然后您可以了解如何在codeigniter中实现第二个。您必须首先了解加入。这样的事情应该让你开始:
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/codeigniter/user-guide/database/active_record.html