我在Mysql中看到了一个关于分层数据的页面,它回答了我50%的问题。 Here是链接。现在,抛出嵌套模型,我希望我也可以为嵌套表上的每条记录加入其他表。例如,我将数据存储在嵌套模型层次结构中,其中包含产品详细信息。现在,我希望我能看到哪个用户购买了哪个产品,并从中获取用户详细信息。
出于这个目的,我在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;
但是这个查询没有正常运行(我的意思是说查询正在运行但是deails不是分层的方式)。任何人都可以帮助我吗?
修改
我尝试过修改代码,现在代码是 -
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;
现在产生的结果如下:
现在需要考虑以下事项 -
请解释。
答案 0 :(得分:1)
由于它是MySQL数据库,我建议你使用适当的分组字段。因为在select子句中你提到了很多字段,但是只在'node.name'中分组。在所有其他数据库(Oracle / SQLServer,..)中,此查询将抛出错误,但不会抛出MySQL。
但是这个单一分组会改变结果和排序。
如果我理解正确,你得到的结果只是顺序不同。通常,orderby'node.lft'可以正常工作。
因此,请尝试使用正确的分组并更新结果。