Php 将DB查询结果插入控制器-CODEIGNITER中的变量

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

我有两张桌子

“决赛选手”表列出了决赛选手以及ID、姓名等字段。 选票表,用于存储决赛选手的选票。 投票表中“确认”字段为“是”的一行表示一票

为了获得某个决赛选手的票数,我参加了竞选

$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”