Php 使用联接的mysql查询可能的规范化
我问了一个问题,要让孩子的父母一直到第六个父母。查询工作正常。但是我只是想知道是否有更好的范围通过更好的查询来实现结果,因为将来如果我想得到父7和父8,我需要修改这段代码,并且随着父ID的增加,这段代码会很长。此外,如果任何事情都可以通过php,这将是伟大的太Php 使用联接的mysql查询可能的规范化,php,mysql,Php,Mysql,我问了一个问题,要让孩子的父母一直到第六个父母。查询工作正常。但是我只是想知道是否有更好的范围通过更好的查询来实现结果,因为将来如果我想得到父7和父8,我需要修改这段代码,并且随着父ID的增加,这段代码会很长。此外,如果任何事情都可以通过php,这将是伟大的太 SELECT u.referred_by as parent_1, c1.referred_by as parent_2, c2.referred_by as parent_3, c3.referred_b
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)作为参数发送,然后检查是否达到特定的父级。希望它能起作用。:)
你好,谢谢你的回答。对于用户id和父id,我只使用一个表,即用户id和父id,用户id是id,父id由\u引用。因此,您给出的查询实际上并不符合我的数据库结构User1001176:我知道您只使用了一个表,实际上我也使用了一个表(users)。parents只是一个与其自身(parents)连接的“with”语句。此解决方案仅在sql server中有效,因为我使用了mysql.EMM中不支持的“with”子句。。这是一个mysql问题,哈哈。我也加了标签
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;