2010-12-22 57 views
0

这是事情: 我有从数据库中检索数据并将信息传递到视图的控制器。在视图中我有这样一个循环:codeigniter将数据从视图传递到模型并检索信息

foreach ($myphotos->result() as $myphoto){ 
echo $myphoto->p_id 
} 

但在这个循环我需要拿起myphoto- $>的p_id,并要求数据库检索ME用户的p_id。

SELECT * FROM users WHERE u_id IN (SELECT u_id FROM p_votes WHERE p_id = 268); 

和:

foreach ($myphotos->result() as $myphoto){ 
echo $myphoto->p_id 
$this->load->model('m_member'); 
$users_voted = $this->m_member->getUsersVotedOnImage($myphoto->p_id); 
foreach ($users_voted->result() as $users){ 
echo '<div id="voterfooter">voted:<a href="$users->i_id">'.$users->name.</a> 
} 
} 

确定这是一个选项,我来了,但也有另一种选择,但选择语句是这么复杂!

这里是如何: 我已经有这样一条:

SELECT * FROM photos WHERE p_id NOT IN (SELECT distinct p_id FROM p_votes where u_id = ".$this->session->userdata('u_id').") LIMIT ".$segment_url.", ".$config['per_page']; 

但如何从用户那里人们对图片投票也捡起,并考虑打印呢?

这里是数据库方案:

CREATE TABLE IF NOT EXISTS `users` (
    `u_id` int(10) unsigned NOT NULL auto_increment, 
    `fb_id` varchar(255), 
    `fb_url` varchar(255), 
    `email` varchar(100), 
    `username` varchar(100), 
    `name` varchar(100), 
    `lastname` varchar(100), 
    `mini_pic_fb` varchar(255), 
    `mini_pic` varchar(255), 
    `country` varchar(100), 
    `place` varchar(100), 
    `address` varchar(100), 
    `nr` int(10), 
    `postcode` varchar(10), 
    `pass` varchar(35), 
    `active` varchar(35), 
    `activation_code` varchar(42), 
    PRIMARY KEY (`u_id`), 
    UNIQUE KEY `email` (`email`), 
    UNIQUE KEY `username` (`username`), 
    UNIQUE KEY `fb_id` (`fb_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ; 


CREATE TABLE IF NOT EXISTS `photos` (
    `p_id` bigint(20) unsigned NOT NULL auto_increment, 
    `u_id` bigint(20) unsigned NOT NULL default '0', 
    `p_date` datetime NOT NULL default '0000-00-00 00:00:00', 
    `p_content` longtext NOT NULL, 
    `p_title` text NOT NULL, 
    `p_photo` text NOT NULL, 
    `p_small` text NOT NULL, 
    `p_thumb` text NOT NULL, 
    `p_up` bigint(20), 
    `p_down` bigint(20), 
    PRIMARY KEY (`p_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ; 

CREATE TABLE IF NOT EXISTS `p_votes` (
    `pv_id` bigint(20) unsigned NOT NULL auto_increment, 
    `u_id` bigint(20) unsigned NOT NULL, 
    `p_id` bigint(20) unsigned NOT NULL, 
    `pv_date` datetime NOT NULL default '0000-00-00 00:00:00', 
    `pv_ip` varchar(200) NOT NULL, 
    PRIMARY KEY (`pv_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=229 ; 
+0

更好的做法:不要在你视图中使用的模型,把所有你需要摆在首位的视图中的数据。 – 2010-12-22 12:29:39

+0

这就是我想要避免的,但无法找到解决方案! – Dakadaka 2010-12-22 12:37:55

回答

0

我踩了刹车MVC模式,但我不知道如何做到这一点别的办法! 如果有人知道如何做到这一点,而不打破MVC请回应! 在视图:

foreach ($myphotos->result() as $myphoto){ 
     $query = "SELECT * FROM users WHERE u_id IN (SELECT u_id FROM p_votes WHERE p_id = ".$myphoto->p_id.")"; 
    $voters = $this->db->query($query)->result(); 

     echo $myphoto->p_title; 
     foreach($voters as $row){ 
     echo '<div id="voterfooter">'; 
    echo '<a href="'.base_url().'clanovi/clan/'.$row->u_id.'">'; 
    echo $row->name.' '.$row->lastname.'</a>'; 
    echo '</div>'; 
    } 
} 
相关问题