プロが教えるわが家の防犯対策術!

入れ子集合モデルでデータを取得しました。

それをリスト表示したいのですが、そのアルゴリズムがわかりません。
どのようにすればいいのでしょか?

再帰呼び出しをしたのですが、これ自体よくわかっていなくて、無限ループしてしまいました。(この部分は、あわててソースを変更したのでありません。)

よろしくお願いします。
----------------------------------------------
【入れ子集合モデルを参考にしたページ】

http://www.geocities.jp/mickindex/database/db_tr …
http://www.makizou.com/archives/1637

【取得したデータ例】

SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM node AS node,node AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY node.lft;

+------------------------+-------+
| name | depth |
+------------------------+-------+
| Apple | 0 |
| コンピューター | 1 |
| デスクトップPC | 2 |
| タワー型 | 3 |
| 一体型 | 3 |
| ラップトップPC | 2 |
| ハンドヘルドPC | 2 |
| デジタル音楽プレーヤー | 1 |
| 携帯電話 | 1 |
| ソフトウェア | 1 |
+------------------------+-------+

【やりたいリスト表示】

<ul>
<li>Apple
<ul>
<li>コンピューター
<ul>
<li>デスクトップPC
<ul>
<li>タワー型</li>
<li>一体型</li>
</ul>
</li>
<li>ラップトップPC</li>
<li>ハンドヘルドPC</li>
</ul>
</li>
<li>デジタル音楽プレーヤー</li>
<li>携帯電話</li>
<li>ソフトウェア </li>
</ul>
</li>
</ul>

A 回答 (1件)

nodeテーブルだけ見る限り入れ子の構造モデルになっていませんね?


表示順番で入れ子になるというのはSQL的に不確定要素がおおいです。
(SQLでは順番は保証されないため)

この回答への補足

>SQLでは順番は保証されないため

id(通し番号)をつけているので、それで並べ替えれば順序は同じではないでしょうか?

補足日時:2009/11/02 21:34
    • good
    • 0
この回答へのお礼

ありがとうございます。
何とか力技でやってみます。

お礼日時:2009/11/03 01:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!