mysql在同一个查询中获取不同的数据

时间:2012-08-25 13:29:36

标签: mysql

我在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;

现在产生的结果如下: mysql result

现在需要考虑以下事项 -

  • 对category_id的按钮效果(为什么?)
  • 即使我现在使用user_id生成输出,也会出现错误的深度计算。

请解释。

1 个答案:

答案 0 :(得分:1)

由于它是MySQL数据库,我建议你使用适当的分组字段。因为在select子句中你提到了很多字段,但是只在'node.name'中分组。在所有其他数据库(Oracle / SQLServer,..)中,此查询将抛出错误,但不会抛出MySQL。

但是这个单一分组会改变结果和排序。

如果我理解正确,你得到的结果只是顺序不同。通常,orderby'node.lft'可以正常工作。

因此,请尝试使用正确的分组并更新结果。