2011-06-27 6 views
0
SELECT node . * , node.page_id, (COUNT(parent.page_id) - (sub_tree.depth +1)) AS depth 
FROM pages AS node, pages AS parent, pages AS sub_parent, (
    SELECT node.page_id, (
    COUNT(parent.page_id) -1 
    ) AS depth 
    FROM pages AS node, pages AS parent 
    WHERE node.lft 
    BETWEEN parent.lft 
    AND parent.rgt 
    AND node.page_id = '42' 
    AND node.page_status =1 
    GROUP BY node.page_id 
    ORDER BY node.lft 
    ) AS sub_tree 
WHERE node.lft 
BETWEEN parent.lft 
AND parent.rgt 
AND node.lft 
BETWEEN sub_parent.lft 
AND sub_parent.rgt 
AND sub_parent.page_id = sub_tree.page_id 
AND node.page_status =1 
GROUP BY node.page_id 
ORDER BY node.lft 

「page_menu_order」行の結果を同じ深度内で並べ替える必要があります。MySQL、PHP、MPTT:子供を体重/コスト/ menu_orderで並べ替え

したがって、子供は階層構造を保っていますが、奥行き内ではコスト/価格/またはpage_menu_orderでソートされます。

答えて

0

は、私はすでに、階層データ構造を使用して、私は同じフロアのカテゴリ

SELECT node.* ,count(parent.id) -1 AS depth FROM pages node 
JOIN pages parent ON node.lft BETWEEN parent.lft AND parent.rgt 
WHERE ...[ Your clause Statment ]... GROUP BY node.id HAVING depth = 0 
を取得するために、このクエリを使用します