これは、カテゴリ/サブカテゴリのサイトナビゲーションを保存するためのテーブルです。
$query = "CREATE TABLE categories (
id int(11) NOT NULL auto_increment,
name varchar(100) NOT NULL,
parentid int(11) NOT NULL,
PRIMARY KEY (id)
)" ;
そして、これらはテーブル内のエントリであると言います
id name parentid
1 animal NULL
2 vegetable NULL
3 mineral NULL
4 doggie 1
5 kittie 1
6 horsie 1
7 gerbil 1
8 birdie 1
9 carrot 2
10 tomato 2
11 potato 2
12 celery 2
13 rutabaga 2
14 quartz 3
私が欲しいのは、与えられたIDに対して、すべてのリーフノードが返され、リーフノードのIDが与えられた場合、リーフノード自体が返されるようなSQLクエリです。
したがって、id 2が設定されている場合、返される行は-ニンジン、トマト、ジャガイモ、セロリ、ルタバガです。idが9の場合、返される行は-9自体です。
可能?
私のサブカテゴリは3レベル以上深くなることはありません。
このページに記載されているコードを試しましたが、リーフノードIDが指定されている場合、リーフノードは表示されません。
ありがとう
いくつかのクエリを試しました。
SELECT distinct t1.name FROM
categories AS t1 LEFT JOIN categories as t2
ON t1.id = t2.parent
LEFT JOIN categories as t3
ON t2.id = t3.parent
WHERE t1.parent = ? OR t1.id = ?
しかし、私は単に結合を理解することができません。
編集:リーフノードIDにパートが指定されている場合、リターンリーフノードを放棄できます。ここで、カテゴリ/サブカテゴリノードを指定して、すべてのリーフノードを返すクエリが必要です。再度、感謝します