如何从父用户ID搜索第一级用户记录

时间:2016-12-03 06:12:34

标签: php mysql

我创建了一个员工的表,所有员工都与其他员工建立了联系,为此,我创建了一个parentUserId字段来了解他的父用户。

这是我的表截图:

enter image description here

现在我刚开始学习PHP& MySQL因此无法获得如何使用SELECT查询获取第一个用户记录。例如,如果我是Stephen Lopez用户,我想知道谁是所有连接用户的第一个用户。

enter image description here

我正在尝试找到Phyllis Hinton用户。是否可以使用SQL查询或者我需要使用PHP进行循环?

2 个答案:

答案 0 :(得分:1)

作为以PHP和mysql开头的人,这里有一个完整的代码示例,可以帮助您获得所需内容。这里没有神奇的SQL,而是一个PHP循环(带有一个计数限制器)来重复询问数据库中连接中的父级。

<?php

/* setup your database information */
$host = 'localhost';
$user = 'db_username';
$pass = 'db_password';
$db   = 'db_name';

$link= mysqli_connect($host,$user,$pass,$db); // connect to the database
if (mysqli_connect_errno()) {                 // if fail connection... exit.
    die(mysqli_connect_error());
}

/* the function to locate the first user in the chain of connections */
function find_first_user($link,$first,$last,$max_count=10){
    $cnt=0;   // local counter as prtection to never go over the $max_count
    $parent=0; 
    $tbl='myTableName';

    // find info about the person in question via the first & last name
    $q="select parentUserId from $tbl where firstName='" . mysqli_real_escape_string($link, $first) .
        "' and lastName='" . mysqli_real_escape_string($link, $last) . "'";
    if($res=mysqli_query($link, $q)){
        list($parent)=mysqli_fetch_row($res);
    }
    // if we found a parentId, repeat looking in the chain of connections
    while($parent && ++$cnt<$max_count){
        $q="select parentUserId,firstName,lastName from $tbl where userId=".intval($parent);
        if($res=mysqli_query($link, $q)){
            list($parent,$first,$last)=mysqli_fetch_row($res);
        }
    }
    return "$first $last";
}

// example usage
print find_first_user($link,'Stephen','Lopez') . "\n";
?>

答案 1 :(得分:0)

我认为如果您知道最高深度的用户级别(例如5)是最深的:

,则可以使用此查询
SELECT
user.firstName,
parent.firstName AS parent_firstName,
super_parent.firstName AS super_parent_firstName,
s_super_parent.firstName AS s_super_parent_firstName,
s2_super_parent.firstName AS s2_super_parent_firstName,
FROM
  `user`
LEFT OUTER JOIN user AS parent ON parent.id = user.parentuserId
LEFT OUTER JOIN user AS super_parent ON super_parent.id =     parent.parentuserId
LEFT OUTER JOIN user AS s_super_parent ON s_super_parent.id =  super_parent.parentuserId
LEFT OUTER JOIN user AS s2_super_parent ON s2_super_parent.id = s_super_parent.parentuserId