Php Codeigniter中的查询表和相关表
我在数据库中设置了两个表,“Posts”表和“Images”表。Images表中的行与Posts表中的ID相关联,因此在任何时候都可以有一个Post,但可以有多个来自分配给它的Images表的行。我不想运行联接,因为当它将帖子添加到图像中的每一行时,会导致Posts表中的内容重复 我希望能够通过以下方式迭代此内容:Php Codeigniter中的查询表和相关表,php,sql,codeigniter,Php,Sql,Codeigniter,我在数据库中设置了两个表,“Posts”表和“Images”表。Images表中的行与Posts表中的ID相关联,因此在任何时候都可以有一个Post,但可以有多个来自分配给它的Images表的行。我不想运行联接,因为当它将帖子添加到图像中的每一行时,会导致Posts表中的内容重复 我希望能够通过以下方式迭代此内容: foreach(posts as post) { foreach(post['image'] as image) { // something her
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')
是否可以在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;
}
试试这个
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;
}
你为什么不试着用左连接呢?桌子有多大?大约300排。我在避免使用连接,因为我不想在遍历帖子时出现重复的帖子行。如果一个表中的单个行与另一个表中的多个行相关,那么它们不会重复吗?