CI 묻고 답하기

제목 select로 테이블 데이터가져오기 여러개
카테고리 CI 2, 3
글쓴이 Givepro 작성시각 2016/09/22 15:05:38
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 21217   RSS
[controller]

메소드 내용일부

$user_idx = $this->uri->segment(3);
$table = 'g_moniter';

$data['views'] = $this -> group_model -> get_g_view($user_idx,$table);


[model]

function get_g_view($user_idx,$table) {
    $sql = "SELECT * FROM $table WHERE user_idx='" . $user_idx . "'";
    $query = $this->db->query($sql);
    $result = $query->row();
    return $result;
}

 

컨트롤러에서 

$user_idx = $this->uri->segment(3);

$table='table_name';

$data['views'] = $this->test_model->get_g_view($user_idx,$table);

이렇게 $user_idx와 $table의 값을 가져오는데요

하지만 model에서 $table의 값을 인식하지를못합니다..

오류내용을 보면 Undefined variable: table 이렇게나옵니다

모델에서 직접 $table='table_name'을 정해주면 문제없이 잘나오는데.. 위 코드처럼 하게되면 문제가있는건가요?

아니면 다른무언간를 선언해야되나요?

 다음글 [보안]입력, 출력 데이타 가공은 어떻게 하고 계시나요... (1)
 이전글 codeigniter 에서 bootstrap 및 jqu... (5)

댓글

kaido / 2016/09/22 15:21:17 / 추천 0
$sql = "SELECT * FROM ".$table."  WHERE user_idx='" . $user_idx . "'";

이렇게 바꿔 보세요.

그리고 가능하면 엑티브 레코드 방식을 추천 드립니다 ^^

 

 

 

$user_idx = $this->uri->segment(3);
$table = 'g_moniter';
$where = array("user_idx"=>$user_idx);
$db_row = $this->model->get_g_view($table, $where);



function get_g_view($table,$data){
        $this->db->from($table);
        $this->db->where($data);
        $result['rows']= $this->db->get()->row_array();
        return $result;
    }

 

이런 방식도 고려해 보세요.

id 필드 값을 컨트롤러 측에서 변경해서 던질수 있기 때문에 더욱 유기적으로 사용 가능 합니다.

Givepro / 2016/09/22 15:28:43 / 추천 0
$this->load->model('group_model');
// 번호에 해당하는 데이터 가져오기
$user_idx = $this->uri->segment(3);
$table='g_moniter';
$data['views'] = $this -> group_model -> get_g_view($user_idx,$table);

 

function get_g_view($user_idx,$table) {
    $sql = "SELECT * FROM ".$table." WHERE user_idx='" . $user_idx . "'";
    $query = $this->db->query($sql);
    $result = $query->row();
    return $result;
}

 

Message: Undefined variable: table

여전히 이렇게 오류가나네요

kaido / 2016/09/22 15:35:03 / 추천 0
function get_g_view($user_idx,$table) {


    $sql = "SELECT * FROM ".$table." WHERE user_idx='" . $user_idx . "'";

echo $sql;
exit;

    $query = $this->db->query($sql);
    $result = $query->row();
    return $result;
}

 

이렇게 하신 다음에 출력 값이 들어가 있는지 확인해 보시고, 해당 쿼리를 직접 db 쿼리기에 넣고 실행해 보세요.

그게 아니면 밴틱 처리 문제 일 수도있습니다.

$sql = "SELECT * FROM  `".$table."`   WHERE user_idx='" . $user_idx . "'";

 

Givepro / 2016/09/22 15:55:00 / 추천 0

감사합니다 위 문제에 대해 정확히 이해했습니다 ^^ 메세지도 감사합니다.

한가지 더 궁금한게 있는데 물어봐도될까요?

 

저렇게 인자값을 전달하면서가 아닌 배열로 처리하는방식도 가능한가요?

예를들면 하나의 모델 메소드에서 여러개의 table을 select 하고

controller 하나로 가져온값들을 view에서 뿌려주는방식이요.

제가 count(*) as cnt 을 이용해서 위와같이 하나의 메소드에 여러 select쿼리문을 넣었는데 문제없이 잘되더라구요.

근데 count(*) as cnt는 구글링으로 하면서 한건데 제가 정확히 이해를 못했어요 ㅠㅠ

어떻게 접근해야될지는알겠는데 항상 제껀 오류라서... 간단하게 table2개를 가져오는 예시좀 알수있을까요? 

 

kaido / 2016/09/22 16:28:15 / 추천 0

1.  배열식으로 던져서 가져오기 가능 합니다.

2. 하나의 모델에서 여러개 셀렉트또한 가능 합니다.

$this->db->from($a_table);
$result['a_teble']= $this->db->get()->row_array();

$this->db->from($b_table);
$result['b_teble']= $this->db->get()->row_array();

$this->db->from($c_table);
$result['c_teble']= $this->db->get()->row_array();

return $result;


배열없이 풀면 이런식이죠. 이걸 배열로 만들어서 반복해서 처리 하시면 됩니다.
로직은 한번 고민 하셔보라는 측면에서 쓰진 않았습니다.

 

3.  cnt 이야기 하시는거 보니 페이지네이션도 고려중이신것 같네요.

테이블 셀렉트와 토탈 카운트를 가져오는 가장 쉬운 방법을 소개해 드리죠.

function page_list($page=1,$pagelist = 20, $table, $where){
		if(is_numeric($page) == false) $page = 1; //숫자가 아니면 1로 처리
		if($page < 0) $page = 1;  
		$limit_ofset = ($page-1) * $pagelist; //offset 처리


		$this->db->select('SQL_CALC_FOUND_ROWS *',false);
		$this->db->from($table);
		$this->db->limit($pagelist,$limit_ofset);

		$result['page_list_m']= $this->db->get()->result_array();
		$result['total_cnt'] =$this->db->query("SELECT FOUND_ROWS() AS total_cnt;")->row()->total_cnt;
		return $result;

	}

이걸 리스트로 처리 할때는

foreach($page_list_m as $key => $value){
    echo $value["id"];
    echo $value["name"]; 
}

 

 

지금 하시는 작업이 어느정도 정리 되면 한번 참고해 보세요.

http://cikorea.net/bbs/view/lecture?idx=7097&page=2&view_category=&lists_style=

 

Givepro / 2016/09/22 16:55:23 / 추천 0
kaido님 답변감사합니다 ^^