1
id_page | id_parent | title
-----------------------------
    1         0         sth1
    2         1         asd
    3         1         qwe
    4         2         are
    5         4         gds
    6         5         lkj
    7         4         nmn

- 1
---- 2
--------- 4
------------- 5
------------------6
--------------7
---- 3

私が達成しようとしているのは、特定の id_page のすべてのサブ子の単一レベルの配列を取得することです。深さに制限はありません。

id_page 2 の場合は取得する必要がarray(4,5,6,7)あり、id_page 4 の場合は取得する必要がありますarray(5,6,7)

少し迷っています。助けていただければ幸いです。

4

2 に答える 2

1

あなたの場合、データベースの編成が正しくありません。現在のデータベース構造では、1 レベルの深さしか取得できません。意味SELECT * FROM pages WHERE parent_page_id = 1。これにより、 の子が得られますpage_id=1。それらの子供のいずれかに子供がいる場合は、子供SELECT * FROM pages WHERE parent_page_id = the_child_idごとに行う必要があります。

それはリソースの使用量が不十分です。これに似たモデルを試してみることをお勧めします。
1 つのクエリで親のすべての子を取得できます。

于 2013-01-06T19:45:57.043 に答える
0

この例に基づいて、次のようなものを使用できるはずです: (Ps: これは睾丸ではありませんが、基本的なフローは正しいことを示しています)

$root_id = 2;
$stack = array();
$childList = array();

array_push($stack, $root_id);

while (count($stack) > 0) {
  $current = array_pop($stack); // Depth first search
  //$current = array_shift($stack); //Breadth first search


  //array_push($stack, $treearr[$current]['children']); Maybe?? Something you'll have to check
  //array_push($childList, $treearr[$current]['children']); 


  for ($treearr[$current]['children'] as $child) {
    array_push($stack, $child);
    array_push($childList, $child);
  }
}

には、のchildList下にあるすべての子が含まれている必要がありますroot_id

于 2013-01-06T20:48:33.517 に答える