这是我模特的代码片段。
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个故事有多种类型。