【问题标题】:Query table and related table in CodeigniterCodeigniter中的查询表和相关表
【发布时间】:2014-10-04 10:13:20
【问题描述】:

我在数据库中设置了两个表,一个“帖子”表和一个“图像”表。 Images 表中的行与 Posts 表相关联,因此在任何时候都可以有一个 Post,但 Image 表中的多行分配给它。我不想运行连接,因为当它将帖子添加到图像中的每一行时,它会导致帖子表中的内容重复

我希望能够通过以下方式迭代此内容:

foreach(posts as post)
{
    foreach(post['image'] as image)
    {
        // something here
    } 
}

在 Django 中,这可以通过以下方式在我的模型中设置:

class Posts

    # something here

   def get_images(self):
       return self.images_set.select_related('post')

是否可以使用他们的 Active Record 在 Codeigniter 模型中进行类似的设置?我能够做到的唯一方法是查询 Posts 表,遍历结果并在循环内查询 Images 表。然后将所有内容设置为新数组并将其发送到控制器。但这似乎根本没有效率。这是一个例子:

public function get_posts()
{
    // Grab all posts
    $query = $this->db->get('posts_table');
    $results = $query->result_array();

    // Arrays for storage
    $photoArray = array();
    $postsArray = array();
    $postsResultArray = array();

    $postsResultArray[] = $results;

    // Query photos in DB
    foreach($photoResultArray[0] as $row)
    {
        $query = $this->db->get_where('uploads', array('tableName' => 'posts_table', 'recordNum' => $row['num'], 'fieldname' => 'images'));
        $results = $query->result_array();

        foreach($results as $row)
        {
            $photoArray[] = $row;
        }

    }

    // Associate each post with photo if available
    foreach($postsResultArray[0] as $post)
    {
        foreach($photoArray as $row)
        {
            if($row['recordNum'] == $post['num']) 
            {
                $post['image'] = $row['urlPath'];
            }
        }
        $postsArray[] = $post;
    }

    return $postArray;
}

【问题讨论】:

  • 你为什么不尝试使用左连接?桌子有多大?
  • 大约 300 行。我避免使用连接,因为我不想在循环浏览帖子时出现重复的帖子行。如果一个表中的单个行与另一个表中的多行相关,它们不会重复吗?

标签: php sql codeigniter


【解决方案1】:

试试这个

 public function get_posts()
 {
     // Grab all posts
     $query = $this->db->get('images');
     $results = $query->result_array();

     // Arrays for storage
     $photoArray = array();
     $postsArray = array();

     $photoResultArray[] = $results;

     // Query photos in DB
     foreach($photoResultArray as $row)
     {
         $photoArray[$row->id] = $row->image;
     }

     $query2 = $this->db->get('posts');
     $results2 = $query2->result_array();
     $postsResultArray[] = $results2;

     // Associate each post with photo if available
     foreach($postsResultArray[0] as $post)
     {
         $postsArray[] = $photoArray[$post->image_id];
     }

     return $postArray;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多