如何在视图页面上的codeigniter中编写子查询?

时间:2017-09-15 05:09:22

标签: php sql codeigniter

我是codeigniter的新手。在查询中遇到问题。如何在codeigniter的视图页面中编写以下查询?

select *
  from registration_status
 where registtration_card_id = (select Max(registration_card_id)
                                  from registration_status
                                 where registration_id = 67);

registration_card_id自动递增,并从注册表中提取registration_id

3 个答案:

答案 0 :(得分:0)

你需要将CI的实例加载到视图中。按照步骤

$ci = & get_instance();
$ci->db->query("Your custome query");

答案 1 :(得分:0)

不,不,不。

首先,你不要在CodeIgniter的视图页面内写一个查询。

你必须在模型中做到这一点,这就是为什么CI是MVC框架。

第二,您可以使用数据库视图。如果您使用的是MySQL,则可以创建一个类似以下的视图:

CREATE VIEW last_card_id AS
select * 
from registration_status

第三,您可以在不使用子查询的情况下首先使用聚合函数,因此View将包含基于registration_id的最大registration_card_id。所以我们编辑上面的视图:

CREATE VIEW last_card_id AS
selet max(registration_card_id) as 'max_id'
from registration_status
group by registration_id

然后在您的模型文件中,您可以调用模型:

public function get_max_card_id($registration_id){
    $this->db->where('registration_id',$registration_id);
    return $this->db->get('last_card_id')->row_array();
}

然后在你的控制器中:

public function max_card(){
    $data['registration'] = $this->registration_model->get_max_card_id($registration_id);
    $this->load->view('view_page',$data);
}
视图文件中的

<?php echo $registration['max_id'];?>

答案 2 :(得分:0)

试试这个

$this->db->select("*")
    ->from("registration_status")
    ->where("registtration_card_id = (select Max(registration_card_id) from registration_status where registration_id = 67 )",false,false)
            ->get()->result();

这是使用有效记录