php - 带有连接的 mysql 查询的可能规范化

标签 php mysql

我查询了一个 child 的 parent ,直到第 6 个 parent 。查询工作正常。但我只是想知道是否有更好的范围通过更好的查询来实现结果,因为将来如果我想获取父级 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_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 FIDDLE

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

最佳答案

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

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;

关于php - 带有连接的 mysql 查询的可能规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25900323/

相关文章:

php - WordPress 两步注册表格

php - DNS 在 PHP 中不工作(但一般情况下可以)

php - 2 个字符串之间的正则表达式匹配

mysql - 如果重复(不是 DISTINCT),只获取一个数据

MySQL修改了时间戳字段的 "Default"和 "Extra"值

php - 使用 mysql 从表的内容中获取搜索键的最大可能值

php - 如何使用 php mysql 识别数据库中未保存的值

php - 从 HTML PHP 生成 PDF

mysql 启动 ubuntu - 错误 1045 (28000) : Access denied for user 'username' @'localhost' (using password: NO)

mysql事务问题