0

NOTEシステムを構築しています。

複数のテーブル(notes、tags、...)があり、$ this-> db-> join();を使用してタグをメインノートに結合しています。すべてを1つのオブジェクトにまとめます。

1つのノートに2つ以上のタグがある場合、異なるタグのみを持つ2つ以上の行が表示されます。残りは同じです。ノートエントリを1つだけにするために、それをマージする必要があります。

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

場所など、TAGSと同じ文字を持つ他のテーブルもある場合があります。メモの場所が複数ある場合があります。

これからどうすればいいですか?note_id、note_textなどのパラメーターを持つ1つのオブジェクトNOTEを作成し、それにTAGSを結合します。おそらく、複数のタグがある場合は、OBJECT PARAMETER=ARRAYにすべてのNOTESが含まれます。

  1. それを達成する方法は?
  2. それを1つのオブジェクトにまとめるという、さらなる開発のための実際の良いアイデアですか?または、foreachに移動して、各行のすべてのタグを一覧表示する必要がありますか?
  3. 誰かがタグに従ってフィルタリングしている場合、フィルタリングをどこにどのように保存すればよいですか?私はこれまで$this->sessionを使用しています。

ありがとう、ヤクブ

4

1 に答える 1

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しましたが、フィールド名が何であれ、あなたはポイントを取得します。

于 2013-03-07T13:26:08.400 に答える