3

このデータ構造モデルを使用するカテゴリにテーブルがあります。また、カテゴリのブランチのパスを示す別のテーブルを使用します。

**t_category**
id | name | parent
------------------
1   mascot   null
2   cat      1
3   dog      1
4   doberman 3

**t_category_path**
id | path
------------------
1   /1/
2   /1/2/
3   /1/3/
4   /1/3/4/

私が欲しいのは、任意のアイテムの親のリストを取得することです。たとえば、「dog」を検索すると「dog、mascot」が表示され、「doberman」を検索すると「doberman、dog、mascot」が表示されます。

私はこれを試しました...しかしそれは逆です、私は両親が葉を手に入れるのを探すことを意味します:

SELECT
    c2.id,
    c2.name,
    p.path
FROM t_category c, t_category c2, t_category_path p, t_category_path p2
WHERE c.id = 1
AND p2.id = c.id
AND p.path LIKE(CONCAT(p2.path,'%'))
AND c2.id = p.id
ORDER BY p.path ASC;

そして明らかに得る:

id | name | path
------------------
1   mascot   /1/
2   cat      /1/2/
3   dog      /1/3/
4   doberman /1/3/4/

しかし、私は「ドーベルマン」から入手したい:

id | name | path
------------------
1   mascot   /1/
3   dog      /1/3/
4   doberman /1/3/4/

葉っぱから相談することはできますか?

4

1 に答える 1

0

おそらく、パス フィールドで線引きされたデータを分割する必要があります。次のようなものを使用します。

id | depth | parent
4    2       3
4    1       1
3    1       1
3    2       3

など...

次に、次のことができます。

SELECT * FROM t_category_path WHERE id = 4

于 2013-07-17T15:57:48.560 に答える