【问题标题】:Insert results of DB query into a variable in controller - CODEIGNITER将 DB 查询的结果插入到控制器中的变量中 - CODEIGNITER
【发布时间】:2013-08-06 20:40:02
【问题描述】:

我有两张桌子。

决赛选手表格,其中列出了带有 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 ?>

所以我想要实现的是将关键投票及其结果添加到数组 $finalists - 显然是正确的,我无法理解如何做到这一点。

我想我应该遍历决赛选手并以某种方式插入该特定决赛选手的查询结果。

任何帮助将不胜感激。

【问题讨论】:

  • 您不想循环查询每个决赛选手。您需要学习如何使用表JOINSUM() 函数与GROUP BY 结合使用。这可以让您在单个查询中获取整个结果集。虽然我不使用 codeigniter,但我确信那里有关于如何执行此操作的文档。
  • 问题是我需要从其中一个表中获取的数据只是特定查询返回的行数。我认为你是对的,它必须在一个查询中是可能的,但我不知道如何。我考虑循环遍历决赛入围者查询的结果并查询每个 ID 的行数,以便可以将其与决赛入围者的其他详细信息一起推送到 $data 数组中。
  • 首先处理原始 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/codeigniter/user-guide/database/active_record.html
  • 嘿迈克,这很好,谢谢。有什么方法可以按投票分组吗?我试过了,但它说没有这样的专栏......你想把你的评论作为答案,以便我可以将其标记为正确答案吗?

标签: php mysql codeigniter templates variable-assignment


【解决方案1】:

在你的控制器中试试这个

   $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 } ?>

更新

【讨论】:

  • 不能使用 $finalist->id 因为它没有引用任何东西
  • $finalist->id 包含你的 id 因为我现在在 foreach 中使用 result()
  • 消息:未定义的变量:决赛选手 - 试图获取非对象的属性 - 致命错误:不能使用 stdClass 类型的对象作为数组
  • 好的,那么告诉我finalists 表的主键是什么?
  • 主键为“id”
【解决方案2】:

首先处理原始 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/codeigniter/user-guide/database/active_record.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多