如何在codenighter中运行连接查询

时间:2016-06-14 07:22:55

标签: javascript php html css

嗨,我是新的codenighter框架工作soome可以帮助我,我怎么能将此连接查询转换为codenighter框架工作,并告诉我,我必须保持连接查询我的意思是在模型或控制器..? 以及如何获取此查询的结果..? 我想传递class_id作为参数..?

我的查询在这里..

SELECT e.roll,s.name,p.title,i.amount,i.amount_paid,i.status,i.creation_timestamp
FROM `payment` p
INNER JOIN student s    ON s.student_id=p.student_id
INNER JOIN enroll e     ON e.student_id=p.student_id 
INNER JOIN invoice i    ON i.student_id=p.student_id AND e.class_id=6 AND e.year="2016-2017"

4 个答案:

答案 0 :(得分:1)

您需要在模型中保留此SQL查询,然后将结果传递给控制器​​。您可以将结果集从模型传递给控制器​​,并可以从那里使用它。如果您想将其传递给视图,则需要将其数据变量传递给视图变量。

它应该是这样的,

在模型文件中:

    function get_data(){
        $this->db->select('enroll.roll,student.name,payment.title,invoice.amount,invoice.amount_paid,invoice.status,invoice.creation_timestamp');    
        $this->db->from('payment');
        $this->db->join('student', 'student.student_id = payment.student_id', 'inner');
        $this->db->join('enroll', 'enroll.student_id = payment.student_id', 'inner');
        $this->db->join('invoice', 'invoice.student_id = payment.student_id', 'inner');
        $this->db->where(array('enroll.class_id'=>6,'enroll.year'=>'2016-2017'));
        $query = $this->db->get();
        if($query->num_rows()>0){
            return $query->result_array();  
        }
    }

在CONTROLLER中,您可以像这样调用此模型函数:

    $data['Data'] = $this->student_model->load_countries();
    $this->load->view('student_data',$data);

这是根据CodeIgniter活动记录框架。希望这会对你有所帮助。

答案 1 :(得分:0)

您可以使用查询方法编写自己的查询。 在查询方法中,您可以轻松使用连接 例如

  

你的模特

    class Model_name extends CI_Model {

                    function __construct()
                    {
                        parent::__construct();
                    }

                    public function get_record(){
                        $data  = $this->db->query('
                                   SELECT e.roll,s.name,p.title,i.amount,i.amount_paid,i.status,i.creation_timestamp
FROM `payment` p
INNER JOIN student s    ON s.student_id=p.student_id
INNER JOIN enroll e     ON e.student_id=p.student_id 
INNER JOIN invoice i    ON i.student_id=p.student_id AND e.class_id=6 AND e.year="2016-2017"
                                  ');
                        if($data->num_rows()>0){
                           return $data;
                        }
                   }
                }

答案 2 :(得分:0)

$ this-> db-> join()是帮助功能来执行连接查询

允许您编写查询的JOIN部分:

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();

//制作:

// SELECT * FROM blogs JOIN comments ON comments.id = blogs.id

如果在一个查询中需要多个连接,则可以进行多个函数调用。

如果需要特定类型的JOIN,可以通过函数的第三个参数指定它。选项包括:左,右,外,内,左外和右外。

$this->db->join('comments', 'comments.id = blogs.id', 'left');
// Produces: LEFT JOIN comments ON comments.id = blogs.id

您也可以直接在query()函数中编写查询。

$query = $this->db->query('SELECT e.roll,s.name,p.title,i.amount,i.amount_paid,i.status,i.creation_timestamp
FROM `payment` p
INNER JOIN student s    ON s.student_id=p.student_id
INNER JOIN enroll e     ON e.student_id=p.student_id 
INNER JOIN invoice i    ON i.student_id=p.student_id AND e.class_id=6 AND e.year="2016-2017"');

参考文献:CodeIgniter Docmentation

答案 3 :(得分:0)

参见: - https://www.codeigniter.com/userguide3/database/query_builder.html

你也可以使用以下风格: - 在模型文件中:

function get_data(){
$this->db->where(array('enroll.class_id'=>6,'enroll.year'=>'2016-2017'));
$this->db- >select('enroll.roll,student.name,payment.title,invoice.amount,invoice.amount_paid,invoice.status,invoice.creation_timestamp');    
$query = $this->db->from('payment')->join('student', 'student.student_id = payment.student_id', 'inner')->join('enroll', 'enroll.student_id = payment.student_id', 'inner')->join('invoice', 'invoice.student_id = payment.student_id', 'inner')->get();

if($query->num_rows()>0){
    return $query->result_array();  //You can also use result(); provide object array
}

}

在CONTROLLER中,您可以像这样调用此模型函数:

 $data['Data'] = $this->student_model->load_countries();
 $this->load->view('student_data',$data);

在视图中,您可以使用$ data变量

来获取此信息