繁体   English   中英

带有联接的mysql查询的可能规范化

[英]possible normalization for a mysql query with joins

我查询了一个孩子的父母,直到生到第六个父母为止。 该查询工作正常。 但是我只想知道将来是否有更好的范围可以通过更好的查询原因来获得结果,如果我想获取父级7和父级8,我将需要修改此代码,并且获取代码的时间会越来越长家长编号。 另外,如果可以通过php进行任何操作,那也很好。

SELECT
    u.referred_by as parent_1,
    c1.referred_by as parent_2,
    c2.referred_by as parent_3,
    c3.referred_by as parent_4,
    c4.referred_by as parent_5,
    c5.referred_by as parent_6
FROM
    users u
LEFT JOIN users c1
    ON  c1.id=u.referred_by
LEFT JOIN users c2
    ON c2.id = c1.referred_by
LEFT JOIN users c3
    ON c3.id = c2.referred_by
LEFT JOIN users c4
    ON c4.id = c3.referred_by
LEFT JOIN users c5
    ON c5.id = c4.referred_by
WHERE u.id = 30

SQL字段

http://sqlfiddle.com/#!2/24694/1

您可以将递归用于您的工作。 以下是一个简单的递归代码,它返回所有祖先,但是如果您想限制要获取的父母的数量,则可以使用以下代码创建一个函数,并将参数6(或7)作为参数发送,并检查是否是否达到了您的特定父母水平。 希望它能工作。 :)

with parents as (
   select id, referred_by
   from users 
   where id = 30
   union all
   select u.id, u.referred_by
   from users u
     join parents p on p.id = u.referred_by
) 
select *
from parents;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM