2012-08-10 2 views
0

row_array 활성 기록 기능을 여러 행에 합류 한 행,MySQL은, CodeIgniter는 내가 세 테이블을 가지고

작품 :

CREATE TABLE `works` (
    `work_id` int(11) NOT NULL AUTO_INCREMENT, 
    `project_id` int(11) NOT NULL, 
    `work_name` varchar(100) NOT NULL, 
    `work_baslangic` int(11) NOT NULL, 
    `work_bitis` int(11) NOT NULL, 
    `work_onay` enum('0','1') NOT NULL, 
    `work_onay_userid` int(11) NOT NULL, 
    `work_brief` text NOT NULL, 
    `work_not` text NOT NULL, 
    `work_url` varchar(50) NOT NULL, 
    `work_employees` varchar(200) NOT NULL, 
    PRIMARY KEY (`work_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 

공지 사항 :

CREATE TABLE `notifications` (
    `notification_id` int(11) NOT NULL AUTO_INCREMENT, 
    `notification_userid` int(11) NOT NULL, 
    `notification_workid` int(11) NOT NULL, 
    `notification_stat` enum('1','0') NOT NULL, 
    `notification_tarih` int(11) NOT NULL, 
    PRIMARY KEY (`notification_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 

사용자

CREATE TABLE `users` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `ip_address` varbinary(16) NOT NULL, 
    `username` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(40) COLLATE utf8_unicode_ci NOT NULL, 
    `salt` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    `activation_code` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `forgotten_password_code` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `forgotten_password_time` int(11) unsigned DEFAULT NULL, 
    `remember_code` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `created_on` int(11) unsigned NOT NULL, 
    `last_login` int(11) unsigned DEFAULT NULL, 
    `active` tinyint(1) unsigned DEFAULT NULL, 
    `first_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `last_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `company` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ; 

시나리오 : 사람들이 새 작업을 만들면 양식 값에 작업 테이블 및 알림 테이블이 삽입됩니다. 알림 테이블은 작업을 수행하는 사람을 저장합니다. 한 명 이상일 수 있습니다. 나는 사용자 ID를 저장하고 사용자를 찾기 위해 사용자 테이블에 가입한다. 컨트롤러에서

: 뷰에서

$data["works"] = $this->db->select("users.first_name, works.work_employees, works.work_name, works.work_baslangic, works.work_bitis, works.work_onay, works.work_onay_userid")->from("works")->join("users", "users.id = works.work_onay_userid", "LEFT")->get()->result_array(); 

:

foreach($works as $row): 

이 라인에서 나는 알림 사용자를 찾는 또 다른 SQL을 작성합니다. 하지만 볼 수있는 또 다른 SQL을 작성하고 싶지 않아, 나는 그들 모두를 컨트롤러 (또는 모델)에서 완성하고 싶다. 어떻게해야합니까?

endforeach; 
+0

는 당신이 보는나요 뷰에서 결과 개체를 얻을 수 게시하기 전에 질문에? 이해할 수있는 상태가되도록 서식을 지정하십시오. – Bojangles

+0

이 지금은 무엇입니까? 고마워요 @JamWaffles –

답변

0
다음 코드

// set to null so you can check against null value in view 
$notifications = null; 
foreach($works as $row) 
    { 

    $query = $this->db->query("SELECT * FROM `notifications` WHERE `notification_userid` = '{$row->works.work_onay_userid}'");// adapt query to your liking 
    foreach($query->result() as $res) 
      { 
      $notifications[] = $res; 
      } 
    } 
$data['notifications'] = $notifications; 

당신이 컨트롤러에 이미 쿼리를 수행 한이 방법을 배치 컨트롤러에서

당신은

관련 문제