2013-09-18 2 views
3

Я новичок в codeigniter (CI), и мне нужно выбрать конкурсы зарегистрированных пользователей и общее количество голосов, скажем, пользователи и таблицы соревнований имеют отношение «многие ко многим» и то же самое касается предметов конкурса. Мне нужно выбрать конкурсы пользователя и все голоса элементов, которые относятся к этому пользователю; также мне нужно выбрать голоса всех конкурсов и получить общее количество голосов за каждого из них. после того, как все это происходит, все результаты должны отображаться в одном представлении (и это самая сложная часть), например, я не могу манипулировать всем этим в одной модели и как возвращать многие массивы контроллеру и так далее ,codeigniter mutiple select queries, зависящие друг от друга

вот пример моего регулятора,:

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

} 
?> 

Я бы будем благодарны за некоторые примеры кода :)

+0

Могу ли я вас заинтересовать в использовании пакета ORM для CodeIgniter? [DataMapper] (http://datamapper.wanwizard.eu/) Многие фреймворки PHP теперь поставляются с ORM, поэтому нет никакого вреда в изучении этого, особенно если вы просто попадаете в него. Он решает проблему отношений, передает значения в представление и т. Д. – JofryHS

+0

о, спасибо! Я проверю это прямо сейчас, и я хочу, чтобы это помогло :) – Jasmine

ответ

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']; 

, пожалуйста, дайте мне знать, если у вас возникнут проблемы.

+0

спасибо, этот код действительно помог мне :) – Jasmine

+0

, если это помогло вам, пожалуйста, примите ответ. – ABorty

Смежные вопросы