2011-01-31 3 views
0

リンジーは、社会的な女の子ですので、彼女は多くの人々を満たしていると、彼女のような彼女のノートブックを整理したいと思います:社会的な女の子のノートブックの問題や、Codeigniterでモデルから階層データを渡す方法は?

最初タブ、やや「学校」、「仕事」のような彼女の名前という、 「党」など「オンライン」彼女はグループのような作成し、各タブ内の
:など「クール」、「便利」、「ベタベタ」、「良いkissers」、「結婚の材料」
およびそれらのグループの内部実際のところ、それぞれが1つのグループにのみ含まれています。

これで、データベースを照会して、ノートブックを一目で見ることができます。私が通過する必要があるだろう

function getNotebook($user_id) 
{ 
    // $data[][][] = array(); // declare 3-dimensional array 
    $sql = "SELECT tab_id, tab_name, tab_color FROM tab WHERE user_id = ?"; 
    $query = $this->db->query($sql, $user_id); 

    foreach ($query->result() as $row) 
    { 
     // ... (put each tab array in the first dimension of $data array) 
     $sql = "SELECT group_id, group_name, group_size, group_position FROM group WHERE tab_id = ?"; 
     $query2 = $this->db->query($sql, $row->tab_id); 

     foreach ($query2->result() as $row2) 
     { 
      // ... (put each group array in the second dimension of $data) 
      $sql = "SELECT person_id, person_name, person_gender, person_eye_color FROM person WHERE group_id = ?"; 
      $query3 = $this->db->query($sql, $row2->group_id); 

      foreach ($query3->result() as $row3) 
      { 
       // ... (put each person array in the third dimension of $data) 
      } 
     } 
    } 

    return $data; 
} 

私はそれがモデルで右ここにHTMLを作成するためによくないことを知っているので、私はそれを保存する必要があります(配列に?)、コントローラにして、モデル化するためにそれを返します、 HTMLタグを追加します。

私はあなたの助けが必要です。

溶液#2:
人テーブルにuser_idのフィールドを追加して、このクエリですべての情報を取得する:

$sql = "SELECT * FROM person p 
    INNER JOIN group g ON g.id = p.group_id 
    INNER JOIN tab t ON t.id = g.tab_id 
WHERE p.user_id = ? 
ORDER BY t.id, g.id"; 
$query = $this->db->query($sql, $user_id); 
+0

他の人があなたの質問に遭遇したときに、あなたが問題を解決するためにやったことを試すことができるように、データベーススキーマに加えた変更を投稿できますか?多次元配列は、あなたがそれに精通していないかどうかを理解するのが難しい場合があります。 –

+0

私は自分のアップデートを拡張しました。 –

答えて

2
function getNotebook($user_id) 
{ 
    $data = array(); // not applicable 
    $sql = "SELECT tab_id, tab_name, tab_color FROM tab WHERE user_id = ?"; 
    $query = $this->db->query($sql, $user_id); 

    foreach ($query->result() as $row) 
    { 
     $temp1 = array(
      'id' => $row->tab_id, 
      'name' => $row->tab_name, 
      'color' => $row->tab_color, 
      'groups' => array() 
     ); // create temporary array for storage after loop 

     $sql = "SELECT group_id, group_name, group_size, group_position FROM group WHERE tab_id = ?"; 
     $query2 = $this->db->query($sql, $row->tab_id); 

     foreach ($query2->result() as $row2) 
     { 
      $temp2 = array(
       'id' => $row2->group_id, 
       'name' => $row2->group_name, 
       'size' => $row2->group_size, 
       'position' => $row2->group_position, 
       'people' => array() 
      ); // create another temporary array for storage after loop for second dimension 

      $sql = "SELECT person_id, person_name, person_gender, person_eye_color FROM person WHERE group_id = ?"; 
      $query3 = $this->db->query($sql, $row2->group_id); 

      foreach ($query3->result() as $row3) 
      { 
       $temp2['people'][] = array(
        'name' => $row3->person_name, 
        'gender' => $row3->person_gender, 
        'eye_color' => $row3->person_eye_color 
       ); // store data 
      } 
      $temp1['groups'][] = $temp2; // store temp array 
     } 
     $data[] = $temp1; // store temp array 
    } 

    return $data; 
} 

あなたが探しているものということですか?

+0

最初に['print_r()'](http://php.net/print-r)で配列を出力してみると、データのフォーマット方法や出力する必要があることがわかります。 – Jonah

+0

@ z-boss:私はいくつかの変更を加えました。あなたは今必要なものを持っていますか? – Jonah

+0

@ z-boss:そうだね。私はいくつかの変更を加えました。今必要なものはすべてありますか? – Jonah

関連する問題