我正在使用表格为应用程序中的多级菜单建模:
CREATE TABLE
CWE_MENUS
(
NODE_ID INTEGER NOT NULL,
PARENT_NODE INTEGER,
INLINE_SORT_NO INTEGER NOT NULL,
ICON VARCHAR2(32),
TEXT VARCHAR2(32) NOT NULL,
ACTION_TYPE VARCHAR2(32),
ACTION_INFO VARCHAR2(512),
ENABLED CHAR(1),
REMARK VARCHAR2(128),
PRIMARY KEY (NODE_ID),
CONSTRAINT CWE_MENUS_FK1 FOREIGN KEY (PARENT_NODE) REFERENCES "CWE_MENUS" ("NODE_ID")
);
我使用这样的SQL来获取所有菜单数据:
select T.*, case when exists(select node_id from cwe_menus D where D.parent_node=T.node_id) then 0 else 1 end as leaf from (
WITH link(NODE_ID, PARENT_NODE, INLINE_SORT_NO, ICON, TEXT, ACTION_TYPE, ACTION_INFO, ENABLED, REMARK, lvl,pth) AS (
SELECT NODE_ID, PARENT_NODE, INLINE_SORT_NO, ICON, TEXT, ACTION_TYPE, ACTION_INFO, ENABLED, REMARK, 1 as lvl, ''||node_id as pth
FROM cwe_menus
where parent_node is null
UNION ALL
SELECT p2.NODE_ID, p2.PARENT_NODE, p2.INLINE_SORT_NO, p2.ICON, p2.TEXT, p2.ACTION_TYPE, p2.ACTION_INFO, p2.ENABLED, p2.REMARK, p1.lvl + 1 as lvl, p1.pth||'.'||p2.node_id as pth
FROM link p1 INNER JOIN cwe_menus p2 ON p1.node_id = p2.parent_node
)
SEARCH DEPTH FIRST BY INLINE_SORT_NO SET order1
SELECT distinct * FROM link ORDER BY order1
) T
这就像魔术一样,但是如何在保留树结构的同时应用一些条件来过滤数据呢?我的意思是返回所有匹配的行及其祖先行。我还需要按INLINE_SORT_NO排序的所有兄弟姐妹,我还需要LVL, PATH, LEAF
列。
我已经在互联网上检查了oracle文档和一些教程,但是他们都没有提到如何做到这一点,并且抱歉我的英语很差。
答案 0 :(得分:0)
只需使用hierarchical queries -
function checkAndHide(){
var wrapper = document.getElementById("wrapper");
wrapper.style.display = (wrapper.querySelector(".image.no") && wrapper.querySelector(".star.no"))? "none" : "block"
}