2013-03-07 110 views
0

我正在构建一个NOTE系统。我有多个表(注释,标签,...),我加入标签到我的主要笔记$ this - > db - > join();把一切都变成一个对象。Codeigniter - db - > join()双重结果合并

当一个音符有两个或更多标签时,我会得到两个或更多行,只有不同的标签。其余的都是一样的。我需要合并它只有一个笔记条目。

$this -> db -> where ('user', USER_ID); 
$this -> db -> join ('tags', 'tags.note_id = note.id', 'inner'); 
$query = $this->db->get('notes'); 

也可能还有其他表与标签具有相同的字符,例如地方。一张纸条可能有多个地方。

如何从现在开始?我希望有一个对象NOTE,其中包含note_id,note_text等参数,并将它们加入标记,如果有多个标记,则包含所有NOTES的OBJECT PARAMETER = ARRAY。

  1. 如何实现这一目标?
  2. 这是一个真正的好主意,可以在一个对象中进一步发展吗?或者我应该去foreach并列出每个行的所有标签?
  3. 当有人根据标签过滤,其中&我应该如何存储一个人的过滤?我到目前为止使用$ this - > session;

谢谢的Jakub

+0

让我看看如果我理解正确,您希望具有多个标签的笔记将具有带有所有标签的标签数组,而不是为每个标签获取一行同一笔记是否是它? – 2013-03-07 12:37:14

+0

我认为这样做是合乎逻辑的。我运行VIEWS FOREACH($ notes - > result()为$ one_note)和 $ one_note-> note_id等等。。我不想有两个相同的note_id行。也许我应该创建一个函数get_all_tags('note_id')并输出它。但第一种解决方案似乎是未来复杂网络开发的正确方法。或者你觉得怎么样? OMG! – 2013-03-07 13:13:01

回答

1

您可能需要使用MySQL的GROUP_CONCAT()

$this->db->select('n.*, GROUP_CONCAT(t.name)', false) 
     ->from('notes n')->join('tags t', 't.note_id = n.id', 'inner') 
     ->where('n.user', USER_ID)->get(); 

我用t.name但无论是哪个字段名称是,你明白了吧。

+0

OMG!我爱你安东尼。我试图在过去的三天里自己写这篇文章!谢谢。 – 2013-03-07 13:51:18