2016-06-16 9 views
1

私はデータベースにテーブルを持っています。このテーブルでは、私は名前、parent_id.please、3つの列を追加しました。PHPを使用してテーブルから階層を作る

ID | name | parent_id 

    1 name1 0 
    2 name2 1 
    3 name3 1 

これでデータベースからこのIDを取得したいと考えています。私はPHPでメソッドを作成し、データベースから1つずつデータをフェッチします。私は

$this->getData(3); // has a parent 

のようなIDが3で、このメソッドを呼び出した場合

function getData($id) 
{ 
      $array = array(); 
      $db = JFactory::getDBO(); 
      $sql = "SELECT * from table_name when id = ".$id; 
      $db>setQuery($sql); 
      $fetchAllDatas = $db->getObjectList(); 

      foreach ($fetchAllDatas as $fetchAllData) 
      { 
       if($fetchAllData->parent_id > 0) 
       { 
        $array[$fetchAllData->parent_id] = $fetchAllData->name; 
        $this->getData($fetchAllData->parent_id); 
       } 
       else 
       { 
        $array[$fetchAllData->parent_id] = $fetchAllData->name; 
       } 
      } 
      return $array; 
} 

の下には、今では
Array(
    [0]=>name1 
) 

そのように返されますが、私は

Array(
    [1]=>name3, 
    [0]=>name1 
) 
以下のようにしたい参照してください。

私は配列を再定義していることを知っていますif私たちは親を持っていますが、それをどう管理していますか 私はarray_push PHP関数を使用していますが、私の状態では動作しません。

+0

「SELECT * from table_name id = some_id'」はこのクエリが動作していますか? –

答えて

-1

あなたのテーブルには一意のIDがあります。そのため、クエリを呼び出すと常に1つの結果しか返されません。たぶん、あなたはこの方法を照会書きたい:

$sql = "SELECT * from table_name when parent_id = ".$id; 

指定したIDと彼の親との結果を取得したい場合、あなたは> fetchSharedFolder(...)の$ this - を呼び出した後にこれを追加する必要があります。

$array = array_merge($array, $this->getData($fetchAllData->parent_id)); 
+0

fetchSharedFolderをgetDataに変更したときに動作していますか? array_mergeでラップすることを忘れないでください。getDataは現在の$ arrayが別の配列を返すため、 –

1
  foreach ($fetchAllDatas as $fetchAllData) 
      { 
      $array[$fetchAllData->parent_id] = $fetchAllData->name; 
      if($fetchAllData->parent_id > 0) 
        array_push($array,$this->getData($fetchAllData->parent_id));     
      } 
      return $array; 

1)あなたがもしで、他に$array[$fetchAllData->parent_id] = $fetchAllData->name;を行うので、あなたはとてもif..elseの出し入れ両方のケースでこれを行います。 2)2番目の呼び出しの結果を元の配列にプッシュして、必要なものを取得しようとします。

+0

です。私はそれをテストしてくれました。 – CiroRa

関連する問題