私は親IDを格納できるparentという名前の列を含むテーブルを持っています。 これにより、自分のデータのツリー構造を作成することができます。木構造の関数Mysql
このようなツリー構造をMySQLで移動するための優れたヘルパー関数はありますか?
たとえば、テーブルに行があり、その上にあるすべての「親」を検索できるようにしたいとします。だからの親の親IDを取得し、ように...
私は親IDを格納できるparentという名前の列を含むテーブルを持っています。 これにより、自分のデータのツリー構造を作成することができます。木構造の関数Mysql
このようなツリー構造をMySQLで移動するための優れたヘルパー関数はありますか?
たとえば、テーブルに行があり、その上にあるすべての「親」を検索できるようにしたいとします。だからの親の親IDを取得し、ように...
は、この人気のlinkからコピー:
CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
INSERT INTO nested_category VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);
SELECT * FROM nested_category ORDER BY category_id;
+-------------+----------------------+-----+-----+
| category_id | name | lft | rgt |
+-------------+----------------------+-----+-----+
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+-------------+----------------------+-----+-----+
あなたはノードFLASH
からすべての親を見つけるためにこれを使用することができます。
を取得単一パス
ネストされたセットモデルでは、 は、複数の自己を結合した:
SELECT parent.name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = 'FLASH'
ORDER BY node.lft;
+----------------------+
| name |
+----------------------+
| ELECTRONICS |
| PORTABLE ELECTRONICS |
| MP3 PLAYERS |
| FLASH |
+----------------------+
子供のleft
は、その親のleft
とright
の間になりますので、これは動作します。
readをさらに検索するか、変更された予約注文ツリートラバーサルを検索してください。
ツリーセット構造は非常に使いやすく、私にも示唆しているものがあります – kappa
この「Hierarchical queries in MySQL」の記事を読んで、トピックの詳細な説明をご覧ください。
しかし、私は物事を単純にしておき、代わりに再帰的なPHP関数を作成したいと思います。
しかし、いくつかの記事を読んだ後、私は最善の方法は、このために考えたことは、さらにthis記事で説明されてきたModified Preorder Tree Traversal
、です。
[可能なのは、単一のクエリでMySQLのツリー構造テーブルを任意の深さまでクエリできますか?](http://stackoverflow.com/questions/169817/is-it-possible-to-query -a-tree-structure-table-in-a-single-query-to-an) – Konerak
[このスレッド](http://stackoverflow.com/questions/4048151/what-are-the-optionsリレーショナルデータベース内の階層構造データのために)には、多くの有用なリンクがあります。 –
@Konerak、それは異なっています - その問題は、すべての子孫をどのように深くするかを求めています。検索結果を見てみると、私は木とSQLについて多くの同様の質問がありますが、この特定の質問はしません。すべての親を得る方法。 –