1

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/のヒントを使用して MySQL ツリーを構築しました。私のツリーが次のようになっているとしましょう。

Electronics
--Keyboards
--Phones
----HTC DESIRE Z
----HTC ONE X
-------Camera
-------Battety
Food
--Fruits
----Apple
----Watermelon
--Vegetables
----Carrot
----Onion

ツリー全体または任意のカテゴリのサブカテゴリを簡単に選択できます。私の問題は、カテゴリを参照するたびにツリー全体を選択する必要がないことです。たとえば、私がいる場合、サブノードHTC One Xを表示する必要はありません。Food現在のノードのすべての親とすべてのメイン ノードを常に表示したいと考えています。

別の例として、Phones私が参加している場合、このツリーを見たいと思います:

Electronics
--Keyboards
--Phones
----HTC DESIRE Z
----HTC ONE X
Food

とりあえずツリー全体を選択して不要なノードをCSSで非表示にすることで解決しました。現在、私のツリーには3k以上の行があり、非常に遅いです。

私が今使っているクエリ:

SELECT `node`.`id`,
       (COUNT(parent.id)) AS `depth`,
       `node`.`title`,
       `node`.`link`
FROM `sklep_kategorie` AS `node`
INNER JOIN `sklep_kategorie` AS `parent`
WHERE (node.lft BETWEEN parent.lft AND parent.rgh)
  AND (node.visible= 1)
GROUP BY `node`.`id_sklep_kategoria`
ORDER BY `node`.`lft` ASC

ヒントをありがとう

@edit 私はこれをやった!1 つのフィールドを追加する必要がありました - parent_id。それで私はこれを行うことができます:

CREATE TEMPORARY TABLE x AS 
SELECT parent.id as parent
FROM `sklep_kategorie` AS `node`
INNER JOIN `sklep_kategorie` AS `parent`
WHERE (node.lft BETWEEN parent.lft AND parent.rgt)
AND (node.id_sklep_kategoria = [ID OF CATEGORY]);

SELECT kat.id_sklep_kategoria, kat.title,kat.link,kat.miniatura
FROM sklep_kategorie kat
LEFT JOIN x
WHERE kat.parent = x.parent
OR kat.parent =0
ORDER BY kat.lft
4

0 に答える 0