私の 50% の質問に答えた Mysql の階層データに関するページを見たことがあります。ここにリンクがあります。さて、ネストされたモデルをスローして、ネストされたテーブルの各レコードに対して他のテーブルも結合できればいいのにと思います。たとえば、製品の詳細を含むネストされたモデル階層にデータを保存しています。ここで、どのユーザーがどの製品を購入したかを確認し、そこからユーザーの詳細を取得できるようにしたいと考えています。
user_id
まさにその目的のために、テーブルのnested_category
を含むテーブルにという名前のフィールドを追加しました。最初にユーザーテーブルをチェックして(ログインしているユーザーを検出して)、次に彼が持っている製品の詳細を取得したいと思います。user_id
user_info
その目的のために、私はこのクエリを使用しています-
SELECT node.name, node.category_id, node.comment, node.user_id, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM nested_category AS node,
nested_category AS parent,
nested_category AS sub_parent,
user_info,
(
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_category AS node,
nested_category AS parent,
user_info
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.user_id = user_info.user_id AND user_info.user_id = 1
GROUP BY node.name
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.name = sub_tree.name
GROUP BY node.name
ORDER BY node.lft;
しかし、このクエリは正しく実行されません (つまり、クエリは実行されていますが、詳細は階層化されていません)。誰でも私を助けることができますか?
編集:
コードを少し変更してみましたが、コードは-
SELECT node.name, node.category_id, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM nested_category AS node,
nested_category AS parent,
nested_category AS sub_parent
(
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_category AS node,
nested_category AS parent,
LEFT JOIN user_info ON user_info.user_id = node.user_id
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND user_info.user_id = 1
GROUP BY node.name
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.name = sub_tree.name
GROUP BY node.name
ORDER BY node.lft;
これにより、次のような結果が得られます-
これには、次の考慮事項があります-
- category_id のボタン効果 (なぜ?)
- 出力を生成するために現在 user_id を使用している場合でも、深さの計算が間違っています。
説明してください。