【发布时间】: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