2

次のようなテーブルがあります。

parentid   uid
10001      10001
10001      10002
10001      10003
10002      10004
10004      10005
10003      10006
10005      10007

この単一のテーブルの行間に親子関係を確立する必要があります。

4 つのレベルまで逆の順序で親を取得する必要があります。たとえば、最後のレコードはuid 10007で、parentid は 10005です。現在、uid 10005の親は10004であり、10004の親は10002であり、10002の親は10001です。

私はMySQLを使用しているため、再帰は不可能のようです。私にはどのような選択肢があり、この複数レベルの問題にどのように対処すればよいでしょうか。PHP/MySQL を使用しています。

よろしくお願いします。

4

1 に答える 1

2

有限の 4 レベルがあるため、再帰は必要ありません (ただし、MS SQL CTE などを使用できると便利です)。

何かのようなもの:

SELECT
  t4.uid as child, 
  --t3.uid as parent,
  --t2.uid as grand_parent,
  --t1.uid as great_grand_parent,
  t1.parentid as great_great_grand_parent
FROM
  your_table_name t1

  inner join your_table_name t2
  on t2.parentid = t1.uid

  inner join your_table_name t3
  on t3.parentid = t2.uid

  inner join your_table_name t4
  on t4.parentid = t3.uin

where 
  t4.uid = '10007' -- your start node.

複数のノードに対してこれを行う必要がある場合は、これを開始ノードを選択するものに結合するか、上記のWHERE t4.uid = '10007'句を次のように置き換える必要があります。WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)

フリーハンドで作ったので誤字脱字はご容赦ください。

于 2013-03-21T08:55:56.623 に答える