Codeigniter查询生成器加入

时间:2018-03-13 16:14:08

标签: php sql codeigniter query-builder

这是我模特的代码片段。

public function story_profile($story_id){   
$this->db->select();
$this->db->from('story');
$this->db->where('story_id',$story_id);
$query = $this->db->get()->result();

foreach($query as $row){
$data['details'][$row->story_id]['title'] = $row->story_title;
$data['details'][$row->story_id]['synopsis'] = $row->synopsis;
$data['details'][$row->story_id]['date'] = $row->date_added;

    $this->db->select('story_genre.genre_id,genre_name');
    $this->db->from('story_genre');
    $this->db->join('genre', 'genre.genre_id = story_genre.genre_id');
    $this->db->where('story_id', $story_id);
    $query = $this->db->get()->result();

    foreach($query as $row){
    $data['genre'][$row->genre_id] = $row->genre_name;}

    $this->db->select('story_tag.tag_id,tag_name');
    $this->db->from('story_tag');
    $this->db->join('tags', 'tags.tag_id = story_tag.tag_id');
    $this->db->where('story_id', $story_id);
    $query = $this->db->get()->result();

    foreach($query as $row){
    $data['tags'][$row->tag_id] = $row->tag_name;}

    $this->db->select('story_content_warning.content_warning_id,content_warning_name');
    $this->db->from('story_content_warning');
    $this->db->join('content_warning', 'content_warning.content_warning_id = story_content_warning.content_warning_id');
    $this->db->where('story_id', $story_id);
    $query = $this->db->get()->result();

    foreach($query as $row){
    $data['content_warning'][$row->content_warning_id] = $row->content_warning_name;}
}
print_r($data);

$this->db->select();
$this->db->from('story');
$this->db->join('story_genre','story_genre.story_id = story.story_id');
$this->db->join('story_tag','story_tag.story_id = story.story_id');
$this->db->join('story_content_warning','story_content_warning.story_id = story.story_id');
$this->db->where('story.story_id',$story_id);
$query = $this->db->get()->result(); 

print_r($query);

我的表格是故事,story_genre,story_tags,story_content_warning,流派,标签,content_warning。

用于控制流派,标签和内容警告的流派,标签,内容警告表。如果我要发布一个故事,在我可以选择我的类型,标签,content_warning的形式,我从上面的3个表中获取它们并且foreach在视图中循环它们。所以没有突然添加的意外类型,标签,内容警告。它们还包含列'id和name'。

story_genre,story_tags,_story_content_warning包含列,'id,story_id,genre / tag / content id'

无论如何,我的问题是,上面的代码中哪一个更“正确/可接受”。

我对多重连接的问题在于它自己循环n次连接。因此,如果我加入了4个表,$query results将自己循环n次。所以我做了另一个查询,我把它分解成一个程序,我先得到细节然后是类型然后是标签然后是内容警告。

编辑:我忘了添加,我还必须在这里添加我的“章节”表。

我认为它对多个连接表很好,结果只有1行。当我说它循环n次表连接时我错了,但它循环返回的行数。

我将我的表设置为故事(1) - (1)story_genre但是有多行。因为有1个故事有多种类型。

0 个答案:

没有答案
相关问题