私は、特定のフィールドのすべての親、祖父母などを深みを持って探しています。例えば、以下の構造を与えられた私は5提供する場合、値は1、2、3、私はこれを行うだろうか4.MySQLの階層的クエリ
| a | b |
-----------
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 3 | 6 |
| 4 | 7 |
する必要があります返さ?
私は、特定のフィールドのすべての親、祖父母などを深みを持って探しています。例えば、以下の構造を与えられた私は5提供する場合、値は1、2、3、私はこれを行うだろうか4.MySQLの階層的クエリ
| a | b |
-----------
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 3 | 6 |
| 4 | 7 |
する必要があります返さ?
SELECT @id :=
(
SELECT senderid
FROM mytable
WHERE receiverid = @id
) AS person
FROM (
SELECT @id := 5
) vars
STRAIGHT_JOIN
mytable
WHERE @id IS NOT NULL
次の回答はMYSQL専用ではなく、PHPを使用しています。この回答は、私が行ったように検索中にこのページに終わるすべての人にとって有益ですが、MYSQLのみを使用することに限定されません。
あなたは、未知の深さの入れ子構造を持つデータベースを持っている場合は、再帰的なループを使用して内容をプリントアウトすることができます:
function goDownALevel($parent){
$children = $parent->getChildren(); //underlying SQL function
if($children != null){
foreach($children as $child){
//Print the child content here
goDownALevel($child);
}
}
}
また、この関数は、JavaScriptのような他の言語で書き直すことができます。
このためにスキーマを変更する必要があります。 [@BillKarwin](http://stackoverflow.com/users/20860/bill-karwin)のプレゼンテーション[SQLとPHPを使った階層データのモデル](http://www.slideshare.net/billkarwin/models)を読んでください。階層的なデータのために)、さまざまなモデルとそれらを実装する方法について説明します。 – Shef
@Shef:スキーマでどのような変更を行う必要があり、どのようにクエリを書くのですか? –
@BillKarwin:あなたのpptでは、上記のロジックはmysqlを使って行うことができないと言いました。そうですか? –