3

私は codeigniter (CI) の初心者であり、ログインしているユーザーのコンテストと総投票数を選択する必要があります。たとえば、ユーザーと競合テーブルには多対多の関係があり、競合アイテムにも同じことが言えます。ユーザーのコンテストと、そのユーザーに関連するすべての項目の投票を選択する必要があります。また、すべてのコンテストの投票を選択し、それぞれの合計投票数を取得する必要があります。結局のところ、すべての結果を1つのビューに表示する必要があります(これが最も複雑な部分です)。たとえば、1つのモデルですべてを操作することはできず、多くの配列をコントローラーに返す方法など。

これが私のコントローラーの例です:

<?php
class User_id extends CI_Controller{

    function __construct()
    {
       parent::__construct();
       $this->load->helper(array('form', 'url'));
       $this->load->library('session');
    }

    function index(){
        $this->load->view('v_user_id');
    }

    function view_comp(){
        $c_id = $this->input->post('id');
        $this->session->set_userdata('c_id',$c_id);
        $s_id = $this->session->userdata('c_id');
        $this->load->model('comps_model');
        $data['rows'] = $this->comps_model->getComps($s_id);
    }           
}
?>

そして、これが「すべての選択クエリ」を含み、前述の「すべての結果」を返す必要がある私の目的のモデルです:

<?php
class Comps_model extends CI_Model{

    function getComps($id){

        $this->load->database(); 
        $id = $this->db->query("select competition_id from user_competition        where user_id='".$id."'");
        if($id->num_rows() > 0){
            foreach($id->result() as $id_row){
                $comp_name = $this->db->query("select competition_title from competition where competition_id='".$id_row->competition_id."'");
                if($comp_name->num_rows() > 0) {
                    //all the stuff should go here or something like that
                }
            }
        }
    }

}
?>

いくつかのコード例に感謝します:)

4

1 に答える 1

1

このように試すことができます

function getComps($id)
{
    $this->load->database();
    $data=array(); 
    $id = $this->db->query("select competition_id from user_competition where user_id='".$id."'");
    if($id->num_rows() > 0)
    {
        $data=$id->result_array();
    }
    foreach($data as $key=>$each)
    {
        //adding competition title
        $comp_name = $this->db->query("select competition_title from competition where competition_id='".$each['competition_id']."'");
        if($comp_name->num_rows()>0){
            $temp=$comp_name->row_array();    
            $data[$key]['competition_title']=$temp['competition_title'];
        }
        else
        {
            $data[$key]['competition_title']="";
        }
        //other calculations will go on 
    }
    echo "<pre>";print_r($data);die;
}

このようにすると、毎回何らかの値を計算し、その値を既存のデータ配列に挿入します。たとえば、合計投票をカウントすると、foreach ループで合計をカウントし、次のように配列に挿入します。

  $data[$key]['total_votes']=$temp['total_votes'];

問題が発生した場合はお知らせください。

于 2013-09-18T11:44:32.983 に答える