【问题标题】:mysql table data select on to field one have reference of othermysql表数据选择到字段一有其他参考
【发布时间】:2014-04-08 13:15:33
【问题描述】:

我有一张这样的桌子.. 这是fiddle

         id          child_id
         1               2
         2               3
         3               0
         4               5
         5               7
         6               0
         7               0         

我需要一个简单的 mysql 查询原因(我的表很大),它会显示一个 id,例如,如果我搜索 id 7,那么它将显示 4,5,7 ids 行.. 意味着首先找到 7 的父在这种情况下,如果有任何该 id 为 5。然后再次检查其子项是否为 any,然后将父项也带入,直到我们得到 0。如果我们用 3 搜索,那么它将显示 1,2,3 行相同方式..

任何人都可以通过一个简单的解决方案来帮助我..提前谢谢

【问题讨论】:

    标签: mysql sql hierarchy


    【解决方案1】:

    试试这个查询:

    SELECT case when col2 is null then col1 
    else col2 end as col FROM
    (SELECT  @first as col1,@parent_id :=
        (
        SELECT id
        FROM    mytable
        WHERE   parent_id = @parent_id
        ) AS col2
    FROM    (
        SELECT @parent_id := @first
        ) var2,
        (
        SELECT  @first := 7
        ) var1
    STRAIGHT_JOIN
        mytable
    WHERE   @parent_id IS NOT NULL)tab
    

    SQL Fiddle

    【讨论】:

    • 我认为这个答案是你想要的我的朋友。
    • 是否可以从 php,ruby 等服务器脚本运行
    • 它在MySQL 上运行良好,但我从未在 php 或 ruby​​ 中尝试过。
    【解决方案2】:

    Oracle 品牌表服务器提供分层查询功能。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm 但 MySQL 没有。

    您可以通过一系列查询来做到这一点。但是没有非常优雅的查询语法。

    【讨论】:

      【解决方案3】:

      在 MySQL 中也有分层结构,

      参考这个,http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多