Php CodeIgniter:在一个视图中显示来自两个表的数据-使用一个循环?

Php CodeIgniter:在一个视图中显示来自两个表的数据-使用一个循环?,php,mysql,codeigniter,codeigniter-2,fetch,Php,Mysql,Codeigniter,Codeigniter 2,Fetch,我想要一些帮助。 我有两个数据库表,关系为1-n(一个相册有许多图像): 现在,我想做的是在我的视图中显示所有相册及其图像,类似于,参见第二个屏幕截图(公文包) 这是我的控制器中的内容: // fetch all album data $albums = $this->album_model->get(); // fetch images for each album foreach ($albums as $album ) { $images = $this->albu

我想要一些帮助。 我有两个数据库表,关系为1-n(一个相册有许多图像):

现在,我想做的是在我的视图中显示所有相册及其图像,类似于,参见第二个屏幕截图(公文包)

这是我的控制器中的内容:

// fetch all album data 
$albums = $this->album_model->get();

// fetch images for each album
foreach ($albums as $album ) {
 $images = $this->albumimage_model->get_by('album_id', $album->album_id);
}

$data = array(
 'albums'  =>  $albums, 
 'images'  =>  $images, 
);
$this->load->view('album_listing', $data); 
如果我在视图中循环查看相册数据,我会得到以下结果:

<?php foreach($albums as $album): ?>
<div class="album">
<p><?php echo $album->title; ?></p>
<p><?php echo $album->description; ?></p>
<div>
<?php endforeach; ?> 

如果您想消除重复条目,请尝试在查询中使用
选择DISTINCT
,这也有类似的用途。 还有,我真的不明白你说的是什么意思:

正在运行的查询按如下方式递增


你可以做如下的事情

控制器-

// fetch all album data <br>
$data['albums']= $this->album_model->get_albums();
// fetch all images<br>
$data['images']=  = $this->album_model->get_images();
$this->load->view('album_listing', $data);<br>

交替 在您的模型中

    public function get_images(){
    { 
       $sql ="select a.album_id, a.description, i.img_id, i.img_file from album a, image i where a.album_id = i.album_id"
       $query = $this->db->query($sql);
       $data   =   array();
       foreach ($query->result() as $row) {
        $data[] = $row;
       }
    return $data;
    }
控制器

 $data['albums_img']= $this->album_model->get_images();
 $this->load->view('album_listing', $data);
看法


希望这将对您有所帮助。

这将增加时间和空间的复杂性。因为多个查询将在您可以通过单个查询执行的位置运行:)我正在尝试遵循CI的做法,以便album_模型匹配albums表,而image_模型匹配images表选择DISTINCT我应该在哪里测试它?在JOIN查询或2个查询的情况下,当您使用
JOIN
两次获取数据时。返回mysql错误:“album_id”列在order子句中不明确,这意味着您试图按多个表中使用的列名进行排序;但在您的声明中没有问题:
order\u by('albums.album\u id')
。您应该像
$this->db->distinct()
那样使用它。您使用的是jamierumbelow的基本模型吗?不,我使用了这个,我已经测试过这个,但它多次返回唱片集数据。请看我在上面的帖子里写了些什么,我已经编辑好了,请查收。当您循环此查询时,使用->get()而不是->get('albums')将始终多次返回相同的唱片集数据。我可以看看你的表数据吗?我已经在帖子上发布了我的表结构。请复习
$query = $this->db->get('albums');
$albums = $query->result_array();

$query = $this->db->get('images');
$images =$query->result_array();

foreach ($albums as $album)
{

    foreach ($images as $image)
    { 
        if($image['album_id'] == $album['album_id']){
            $data[$album['album_id']]['images'] = $image['album_id'];
        }
    }
}

var_dump($data);
// fetch all album data <br>
$data['albums']= $this->album_model->get_albums();
// fetch all images<br>
$data['images']=  = $this->album_model->get_images();
$this->load->view('album_listing', $data);<br>
foreach ($albums as $album)
{

    foreach ($images as $image)
    { 
        if($image->album_id == $album->album_id)
        echo "Album - ".$album->album_id.", Title".$album->title.", Description".$album->description." Image ID - ".$image->img_id."Img File - ".$image->img_file;
    }
}
    public function get_images(){
    { 
       $sql ="select a.album_id, a.description, i.img_id, i.img_file from album a, image i where a.album_id = i.album_id"
       $query = $this->db->query($sql);
       $data   =   array();
       foreach ($query->result() as $row) {
        $data[] = $row;
       }
    return $data;
    }
 $data['albums_img']= $this->album_model->get_images();
 $this->load->view('album_listing', $data);
 foreach ($albums_img as $album)
 { 

    echo "Album - ".$album->album_id.", Title".$album->title.", Description".$album->description." Image ID - ".$album->img_id."Img File - ".$album->img_file;
 }