PHP で完全に機能する nesetd セット システムを
使用しています。これを使用して、最大深度 = 2 のシンプルなメニュー構造を構築しています。
ここで、すべてのメニュー項目の表示状態、つまりアクティブかどうかを制御する追加フィールドをテーブルに追加しました。私の必要性は、親を非アクティブ化した場合、アクティブであってもクエリが子を返さないようにしたいということです。
これは、メニュー ツリー全体を取得するための実際のコードです。
SELECT `nesty`.*,
(COUNT(`parent`.`id`) - (`sub_tree`.`depth` + 1)) AS `depth`
FROM `menus` AS `nesty`,
`menus` AS `parent`,
`menus` AS `sub_parent`,
(
SELECT `nesty`.`id`,
(COUNT(`parent`.`id`) - 1) AS `depth`
FROM `menus` AS `nesty`,
`menus` AS `parent`
WHERE `nesty`.`lft` BETWEEN `parent`.`lft` AND `parent`.`rgt`
AND `nesty`.`id` = 1
AND `nesty`.`tree_id` = 1
AND `parent`.`tree_id` = 1
GROUP BY `nesty`.`id`
ORDER BY `nesty`.`lft`
) AS `sub_tree`
WHERE `nesty`.`lft` BETWEEN `parent`.`lft` AND `parent`.`rgt`
AND `nesty`.`lft` BETWEEN `sub_parent`.`lft` AND `sub_parent`.`rgt`
AND `sub_parent`.`id` = `sub_tree`.`id`
AND `nesty`.`tree_id` = 1
AND `parent`.`tree_id` = 1
GROUP BY `nesty`.`id`
HAVING `depth` > 0
ORDER BY `nesty`.`lft`
だから基本的にwhere句を追加したい
AND `nesty`.`visible` = 1
非アクティブ化されたアイテムが誰かの親ではない限り、うまく機能していることを追加すると、可視フィールドが0に等しい場合、および/またはその親の可視フィールドが0に等しい場合、メニューアイテムが返されないことが必要です
事前にthnx